Boost Message Queue ne repose pas sur la file d'attente de messages POSIX? Impossible de choisir (2)?

StackOverflow https://stackoverflow.com/questions/408059

Question

Je pensais que j'utiliserais le File d'attente de messages à la place des sockets pour la communication au sein d'un hôte. Mais après avoir exploré cette base de données, il semble que cette bibliothèque évite pour une raison quelconque l'installation de file d'attente de messages POSIX (prise en charge par mon système Linux) et soit plutôt implémentée au-dessus de la mémoire partagée POSIX. L’interface est assez similaire pour ne pas deviner tout de suite, mais cela semble être le cas.

L’inconvénient pour moi est que la mémoire partagée obtenue via shm_open (3) ne semble pas être utilisable avec select (2) , contrairement aux files d’attente de messages POSIX obtenues. via mq_open (3) .

Il semble que la bibliothèque de Boost perd dans ce cas. Est-ce que quelqu'un comprend pourquoi cela devrait être? Même si les files d'attente de messages POSIX ne sont disponibles que sur certains systèmes, je m'attendrais à ce que Boost utilise cette installation là où elle est disponible et ne la réimplémente que si nécessaire. Le système POSIX présente-t-il un écueil que je ne reconnais pas encore?

Était-ce utile?

La solution

L’utilisation de la classe de synchronisation Boost.Interprocess, l’autre jour, a été similaire à celle de la classe de condition. Il est implémenté de manière "générique". Cela a été fait en utilisant un verrou tournant personnalisé qui est très inefficace (au moins sur OS X). À toutes fins pratiques, les classes de synchronisation étaient inutiles.

D'après mon expérience, la bibliothèque Interprocess est assez immature. Je l'utilise pour la mémoire partagée, et cela fonctionne plutôt bien, mais il y a quelques aspérités et j'ai dû pirater certaines "fonctionnalités manquantes". telles que le redimensionnement dynamique de la mémoire partagée, etc.

En résumé, ne vous attendez pas à ce que cette bibliothèque soit une solution miracle pour l'instant. C'est bon, mais pas exceptionnel en ce moment.

Autres conseils

Oui, malheureusement ce n'est pas le cas. J'ai aussi été déçu quand je me suis rendu compte qu'après avoir creusé des sources.

Mais voici un autre (bon) aspect de ce fait: si votre programme utilise boost :: asio , vous pouvez envelopper l'API des files de messages POSIX comme un autre datagramme source de données et cela (IMHO) serait même préférable si cela faisait partie de boost :: interprocess ... ce serait assez simple, mais (IMHO) Cela mérite certainement, alors vous pouvez travailler avec MQ de manière unifiée et utiliser le pouvoir d’autres boost :: asio ...

... dans mon prochain projet, si j'avais à nouveau besoin de POSIX MQ, je le ferais certainement:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top