Esistono tre modi principali in Linux per scambiare dei messaggi tra due distinti processi.
- Usare dei socket IP, ma non è argomento di questo post
- Le POSIX message queues
- Le Message queues System V interproces comunication system
Entrambi i sistemi presi in considerazione da questo post permettono lo scambio di messaggi tra diversi processi attraverso strutture implementate a livello di kernel (per le MQ POSIX a aprtire dalla versione 2.6.6), ma presentano anche sostanziali differenze.
Le MQ POSIX nascono in tempi più recenti, sono considerate più attuali, sono meglio mantenute dagli sviluppatori del kernel, offrono maggiore portabilità verso altri sistemi Unix e non. Al contrario le SYSV IPC sono più datate, poco o niente mantenute (alcuni dicono a rischio scomparsa) e di difficile o nulla portabilità.
Le MQ POSIX presentano un ottima integrazione nei file system linux. Vengono identificate attraverso un nomefile (qualche cosa del tipo /nomecoda); possono essere visualizzate e manipolate attraverso un file system standar (previamente montato con il comando mount -t mqueue none /nome_nelladirectory); possono essere configurate attraverso il file system standard di linux /proc/sys/fs/mqueue. Inoltre sotto Linux un message queue descriptor è a tutti gli effetti un file descriptor e dunque monitorabile con funzioni quali select o poll. Le MQ SYSV seguono regole poco conformi agli standard Linux. Vengono identificate attraverso un id numerico; vengono visualizzate e manipolate attraverso specifici comandi (ipcs, ipcrm); il descriptor ottenuto non è un file descriptor e dunque va manipolato con le funzioni specifice; alcuni parametri di configurazione possono essere manipolati dal file system /proc/sys/kernel.
A livello prestazionale POSIX e SYSV sembrano equivalersi, è oportuno tenere presente che sempre più le API SYSV sono e saranno implementate come layer aggiuntivo sulle API POSIX e dunque con prestazioni certamente non migliori di queste ultime. Le MQ POSIX nascono pensando al real-time e sono quindi meglio strutturate per compiti di questo tipo.
Per contro essendo ancora relativamente recenti le MQ POSIX non godono ancora della diffusione della quale godono le SYSV IPC, ad esmpio le POSIX MQ non sono ancora gesstite da linguaggi quali il php