2011-01-03 20 views
65
  1. Quali sono le differenze tra e POSIX IPC?
  2. Perché abbiamo due standard?
  3. Come decidere quali funzioni IPC utilizzare?

risposta

78

Entrambi hanno gli stessi strumenti di base: semafori, memoria condivisa e code di messaggi. Offrono un'interfaccia leggermente diversa a quegli strumenti, ma i concetti di base sono gli stessi. Una differenza degna di nota è che POSIX offre alcune funzionalità di notifica per le code di messaggi che Sys V non possiede. (Vedere mq_notify().)

Sys V IPC è stato intorno per più lungo, che ha un paio di implicazioni pratiche -

Innanzitutto, POSIX IPC è meno ampiamente implementato.Ho scritto un wrapper Python per POSIX IPC e its documentation lists what I know about POSIX IPC implementations on various platforms.

Su tutte le piattaforme elencate in tale documentazione, Sys V IPC è completamente implementato AFAIK, mentre è possibile vedere che POSIX IPC non lo è.

La seconda implicazione dell'età relativa è che POSIX IPC è stato progettato dopo l'utilizzo di Sys V IPC per un po 'di tempo. Pertanto, i progettisti dell'API POSIX sono stati in grado di apprendere dai punti di forza e di debolezza dell'API Sys V. Di conseguenza, l'API POSIX è più semplice da e più facile da usare IMO e io lo consiglio tramite l'API Sys V.

Devo notare che non ho mai eseguito test di prestazioni per confrontare i due. Penserei che l'API più vecchia (Sys V) avrebbe avuto più tempo da ottimizzare , ma questa è solo una speculazione che ovviamente non può sostituire il test del mondo reale.

Per quanto riguarda il motivo per cui esistono due standard, POSIX ha creato lo standard perché riteneva che fosse un miglioramento rispetto allo standard Sys V. Ma se tutti sono d'accordo sul fatto che POSIX IPC è migliore, molti molti programmi utilizzano ancora l'IPC di Sys V e ci vorranno anni per portarli tutti su POSIX IPC. In pratica, non ne varrebbe la pena, quindi anche se tutto il nuovo codice usasse POSIX IPC a partire da domani, l'IPC di Sys V resterebbe fermo per molti anni.

Non possiamo dirvi quale utilizzare senza sapere molto di più su ciò che intendete fare, ma le risposte che avete qui dovrebbero darvi informazioni sufficienti per decidere da soli.

-3
  • systen V e POSIX IPC sono due implementazioni diverse, ma correlate della stessa cosa.

"Unix System V, comunemente abbreviato SysV (e di solito pronunciato, anche se raramente scritto come 'Sistema Five'), è una delle prime versioni commerciali del sistema operativo Unix. E 'stato originariamente sviluppato da Telefono americano & Telegraph (AT & T) e rilasciato per la prima volta nel 1983. "

-Wikipedia

"POSIX o "Portable Operating System Interface [per Unix]" è il nome di una famiglia dei relativi standard specificato dalla IEEE per definire l'interfaccia di programmazione dell'applicazione (API)"

-Wikipedia

  • Systm V era lì in precedenza. POSIX si è evoluto fuori dall'iniziativa di standardizzazione di IEEE.

  • GNU/Linux è partially conforme a POSIX. Quale utilizzare dipende da quale sistema operativo si sta utilizzando questo IPC. La maggior parte dei venditori si sta spostando verso POSIX.

Unix Network Programming: Interprocess Communications v. 2 by Richard Stevens dà una buona occhiata a entrambi.

Unix Network Programming http://ecx.images-amazon.com/images/I/51V1DSSA8NL._SL500_AA300_.jpg

+4

Non si discute nulla di Interprocess Communicaton come indicato nelle domande. –

15
  1. credo che la differenza principale è che tutti POSIX IPC è thread-safe, mentre la maggior parte SysV IPC non è [1].
  2. A causa di Unix wars [2]. La specifica UNIX (SUS) [3], alias POSIX, è stata creata per standardizzare le interfacce su sistemi basati su Unix.
  3. Probabilmente vuoi POSIX. Dipende esclusivamente dalle tue esigenze.
4

System V IPC è precedente e POSIX IPC è più recente. Tuttavia ci sono alcune differenze per alcuni aspetti. Non sempre Posix è migliore di System V.

  1. I semafori, code e la memoria condivisa per Posix hanno nomi stringa ASCII, mentre sotto System V questi sono dati con numero intero.

  2. I semafori System V consentono di essere rilasciati automaticamente se il processo muore (semop SEM_UNDO flag). Non esiste una cosa del genere per Posix.

  3. Su Linux e FreeBSD c'è un grande vantaggio delle code posix, dato che il gestore dato da mq_open è fondamentalmente un descrittore di file che può essere sottoposto a polling/epolled/selected/kqueued.