web-dev-qa-db-fra.com

System V IPC vs POSIX IPC

  1. Quelles sont les différences entre System V IPC et POSIX IPC?
  2. Pourquoi avons-nous deux normes?
  3. Comment décider quelles fonctions IPC utiliser?
76
Meghasyam

Les deux ont les mêmes outils de base - sémaphores, mémoire partagée et files d'attente de messages. Ils offrent une interface légèrement différente de ces outils, mais les concepts de base sont les mêmes. Une différence notable est que POSIX offre certaines fonctionnalités de notification pour les files d'attente de messages que Sys V ne propose pas. (Voir mq_notify().)

Sys V IPC existe depuis plus longtemps, ce qui a quelques implications pratiques -

Premièrement, POSIX IPC est moins largement implémenté. J'ai écrit un wrapper Python pour POSIX IPC et son la documentation répertorie ce que je sais sur POSIX IPC sur diverses plates-formes .

Sur toutes les plates-formes répertoriées dans cette documentation, Sys V IPC est complètement implémenté AFAIK, tandis que vous pouvez voir le POSIX IPC ne l'est pas.

La deuxième implication de leur âge relatif est que POSIX IPC a été conçu après que Sys V IPC ait été utilisé pendant un certain temps. Par conséquent, les concepteurs de l'API POSIX ont pu apprendre des forces et des faiblesses de l'API Sys V. Par conséquent, l'API POSIX est plus simple et plus facile à utiliser IMO, et je le recommande par rapport à l'API Sys V.

Je dois noter que je n'ai jamais exécuté de tests de performances pour comparer les deux. Je pense que l'ancienne API (Sys V) aurait eu plus de temps pour régler les performances, mais ce ne sont que des spéculations qui ne remplacent bien sûr pas les tests dans le monde réel.

Quant à savoir pourquoi il existe deux normes - POSIX a créé leur norme parce qu'elles pensaient que c'était une amélioration par rapport à la norme Sys V. Mais si tout le monde était d'accord pour dire que POSIX IPC est meilleur, de nombreux programmes utilisent encore Sys V IPC et il faudrait des années pour les porter tous sur POSIX IPC). En pratique, cela ne vaudrait pas la peine, même si tout le nouveau code utilisait POSIX IPC à partir de demain, Sys V IPC resterait pendant de nombreuses années) .

Nous ne pouvons pas vous dire ce que vous devez utiliser sans en savoir beaucoup plus sur ce que vous avez l'intention de faire, mais les réponses que vous avez ici devraient vous donner suffisamment d'informations pour décider vous-même.

97
Philip Semanchuk
  1. Je crois que la principale différence est que tous les POSIX IPC sont thread-safe, alors que la plupart des SysV IPC n'est PAS [ 1 ]).
  2. À cause de Guerres Unix [ 2 ]. La spécification UNIX unique (SUS) [], alias POSIX, a été créée pour normaliser les interfaces sur les systèmes basés sur Unix.
  3. Vous voulez probablement POSIX. Dépend exclusivement de vos besoins.
19
jweyrich

System V IPC est plus ancien et POSIX IPC est plus récent. Cependant, il y a quelques différences pour certains aspects. Pas toujours Posix est meilleur que System V.

  1. Les sémaphores, les files d'attente et la mémoire partagée pour Posix ont des noms de chaîne Ascii, tandis que sous System V, ils sont donnés avec un nombre entier.

  2. Les sémaphores System V permettent d'être libérés automatiquement si le processus se termine (drapeau semop SEM_UNDO). Il n'y a rien de tel pour Posix.

  3. Sous Linux et FreeBSD, les files d'attente posix présentent un grand avantage, car le gestionnaire fourni par mq_open est essentiellement un descripteur de fichier qui peut être interrogé/épilé/sélectionné/kqueued.

5
Madars Vi