Les deux ont les mêmes outils de base : sémaphores, mémoire partagée et files de messages. Ils offrent une interface légèrement différente pour 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 n'offre pas. (Voir mq_notify()
.)
Le Sys V IPC existe depuis plus longtemps, ce qui a quelques implications pratiques --
Premièrement, l'IPC POSIX est moins largement implémenté. J'ai écrit un wrapper Python pour POSIX IPC et sa documentation liste ce que je sais des implémentations POSIX IPC sur diverses plateformes .
Sur toutes les plateformes listées dans cette documentation, l'IPC Sys V est complètement implémenté AFAIK, alors que vous pouvez voir que l'IPC POSIX 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 tirer des enseignements des forces et des faiblesses de l'API Sys V. En conséquence, l'API POSIX est plus simple et plus facile à utiliser. et plus facile à utiliser, et je la recommande plutôt que l'API Sys V.
Je dois noter que je n'ai jamais effectué de tests de performance pour comparer les deux. J'aurais pensé que l'ancienne API (Sys V) aurait eu plus de temps pour améliorer les performances, mais ce n'est qu'une spéculation qui, bien sûr, ne remplace pas les tests en conditions réelles.
Quant à la raison pour laquelle il y a deux standards, POSIX a créé son standard parce qu'ils pensaient qu'il était une amélioration du standard 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 vers POSIX IPC. En pratique, l'effort n'en vaudrait pas la peine, donc même si tous les nouveaux codes utilisaient POSIX IPC dès demain, Sys V IPC resterait en place pendant de nombreuses années.
Nous ne pouvons pas vous dire laquelle vous devez utiliser sans en savoir beaucoup plus sur ce que vous avez l'intention de faire, mais les réponses que vous avez obtenues ici devraient vous donner suffisamment d'informations pour décider par vous-même.
2 votes
Il y a une raison qui m'a poussé à choisir les files de messages sysv plutôt que posix. La possibilité de délivrer des messages par mtype n'est pas supportée dans les files de messages posix. J'avais sur le blog à ce sujet..
0 votes
Dans le livre intitulé Linux Programming Unleashed 2nd Edition par Kurt Wall page 382, il est dit :
System V IPC is well known and commonly used, but the Linux implementation of it is badly broken.
Je ne sais pas si des améliorations ont été apportées à Linux pour résoudre ce problème, si quelqu'un le sait, dites-le. Aujourd'hui, je suis aussi confronté au même choix entre IPC Posix o Système V IPC et mon approche consiste à bien comprendre le type de primitive IPC qui va être utilisé, car il y a des avantages à l'un par rapport à l'autre. Par exemple, un processus peut mourir brusquement et que se passe-t-il alors ?