GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Empfehlung für die Kommunikation zwischen Prozessen

D-Bus ist ziemlich nützlich und sehr stabil, um IPC auf demselben Host auszuführen. http://www.freedesktop.org/wiki/Software/dbus


Wie Sie gesehen haben, können Sie für die Kommunikation zwischen Prozessen Folgendes verwenden:

  • Gemeinsamer Speicher
  • Benannte Pipes
  • TCP/UDP-Sockets (ggf. lokale)

Shared Memory hat den Vorteil der Performance, da Sie beim Senden/Empfangen von Nachrichten keinen Puffer haben. Allerdings müssen Sie Ihren Datenaustausch mit einem anderen IPC synchronisieren. Das können IPC-Semaphore oder ... Named Pipes oder Sockets sein.

Wenn Leistung nicht das Hauptziel ist, bevorzuge ich Sockets, da ihre Verwendung einfach ist und auf die Kommunikation zwischen Computern ausgedehnt werden kann.

Der beste Weg besteht darin, Ihre Kommunikation mit einer Klasse zu abstrahieren, die gemeinsam genutzten Speicher verwenden kann, wenn sich die beiden Prozesse auf demselben Computer und Sockets befinden, wenn dies nicht der Fall ist. Dann müssen Sie zwischen UDP und TCP wählen;-)

Bevorzugen Sie für Synchron-/Pufferaustausch TCP, da es zuverlässiger ist.

Ich verwende keine benannten Pipes, da ich Socket für die Möglichkeit der Kommunikation zwischen Computern bevorzuge, und natürlich gibt es viele portable Socket-Bibliotheken ...

meine2 Cent

BEARBEITEN:

Für die Synchronisation ist Shared Mem vielleicht nicht das beste Werkzeug. In Ihrem Fall kann es verwendet werden, indem ein kleiner Speicherplatz gemeinsam genutzt wird, mit einem Speicherplatz für jeden Prozess, der auf Befehle wartet. Sie können entweder jeden eingehenden Befehl abfragen oder einen gemeinsam genutzten Semaphor verwenden. Der schnellste Weg ist, dass Ihre Prozesse auf benannte Semaphore warten und einen gemeinsam genutzten Speicherplatz für ihre Befehle/Parameter lesen. Die Verwendung von Named Pipes ist sicherlich einfacher, aber nicht so schnell. So schnell muss man doch nicht sein ? Wie auch immer, abstrahieren Sie das in einer Klasse, die Ihr Austauschprotokoll modelliert, und probieren Sie die beiden Wege aus :-)


Eine gute Wahl ist die Verwendung von Socketpair, sehr schnell und effizient.


Boost hat eine nette InterProcess-Bibliothek, die plattformübergreifend und ziemlich intuitiv ist.

Ich habe allerdings nur damit gespielt, also könnte es da draußen bessere Alternativen geben.

Wenn Sie jedoch keinen gemeinsamen Speicher benötigen, würde ich bei einem Messaging-Ansatz bleiben. Du vermeidest Deadlocks und Rennbedingungen. Das Pipe-Prinzip ist wirklich toll, und es erlaubt sogar faules Verhalten, was dir je nach Angelegenheit viel Rechenarbeit ersparen kann!


Linux
  1. Linux Memory Management – ​​Swapping, Caches und Shared VM

  2. Wie listet man Prozesse auf, die an ein Shared-Memory-Segment in Linux angehängt sind?

  3. So verwenden Sie Shared Memory mit Linux in C

  4. Gemeinsam genutzten Posix-Speicher entfernen, wenn er nicht verwendet wird?

  5. Gemeinsamer Linux-Speicher:shmget() vs. mmap()?

Einführung in den Leitfaden zur Kommunikation zwischen Prozessen in Linux

So überprüfen Sie den gemeinsam genutzten Linux-Speicher mit dem ipcs-Befehl

Erkennen Sie veraltete gemeinsam genutzte Bibliotheken im Speicher mit UChecker

Zuweisen und Freigeben von Speicher über Shared-Lib-Grenzen hinweg

Warum ist Kernel Shared Memory 0 auf Ubuntu 12.04?

rkhunter:Verdächtige Shared-Memory-Segmente