Frage

Ich dachte, ich Boost.Interprocess die benutzen würde? Message Queue anstelle von Sockets für die Kommunikation innerhalb eines Host. Aber nach hinein zu graben, so scheint es, dass diese Bibliothek aus irgendeinem Grunde die Nachrichtenwarteschlange Einrichtung POSIX meidet (die mein Linux-System unterstützt), und stattdessen wird oben auf POSIX Shared Memory realisiert. Die Schnittstelle ist ähnlich genug, dass man das nicht sofort erraten könnte, aber es scheint der Fall zu sein.

Der Nachteil für mich ist, dass Shared Memory über shm_open(3) erhielt nicht mit select(2) verwendbar zu sein scheint, im Gegensatz zu POSIX-Nachrichtenwarteschlangen über mq_open(3) erhalten.

Es scheint, wie Boost-Bibliothek in diesem Fall verliert. Kennt jemand verstehen, warum sollte dies sein? Auch wenn es POSIX Message Queues auf einigen Systemen nur verfügbar sind, würde ich erwarten, dass Boost-Anlage zu verwenden, wo es verfügbar ist, und reimplementieren es nur notwendig, wo. Gibt es eine Gefahr des POSIX-System, das ich noch nicht erkennen?

War es hilfreich?

Lösung

Ich lief in einer ähnlichen Situation den anderen Tag, wenn Boost.Interprocess' Sync-Klassen: nämlich die Zustandsklasse. Es ist in einer „allgemeinen“ Art und Weise umgesetzt werden, aber so, wie es getan wurde, ist eine benutzerdefinierte spinlock zu verwenden, das ist hoch ineffizient (auf OS X zumindest). Für alle Absichten und Zwecke machte es die Sync-Klassen nutzlos.

Nach meiner Erfahrung ist die prozessübergreifende Bibliothek ziemlich unreif. Ich benutze es für Shared Memory, und es ist ziemlich gut funktioniert, aber es gibt einige Ecken und Kanten, und ich habe einige „fehlende Features“ wie dynamisch Ändern der Größe Shared Memory etc hacken um hatte.

Insgesamt erwartet nicht, diese Bibliothek ein Allheilmittel sein nur noch. Es ist gut, aber nicht außergewöhnlich zu diesem Zeitpunkt.

Andere Tipps

Ja, leider ist es nicht. Ich war auch enttäuscht, als dass nach dem Graben Quellen realisieren.

Aber hier ist andere (gut) Seite dieser Tatsache: Wenn Ihr Programm boost::asio verwendet, können Sie wickeln POSIX Nachricht API als nur ein weiteres Datagramm Datenquelle und diese Warteschlangen (IMHO) wäre noch besser zu nutzen, wenn es ein Teil von boost::interprocess ist ... es wäre durchaus nicht trivial, aber (IMHO) verdient auf jeden Fall diese, so dass Sie w / MQ in einer einheitlichen Art und Weise arbeiten können und verwenden Macht von anderen boost::asio stuff ...

... in meinem nächsten Projekt, wenn ich wieder POSIX MQ brauchen würde, ich werde auf jeden Fall auf diese Weise nehmen:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top