Pipes und Shared Memory Vor- und Nachteile?

1 Antwort

Na, es sind ja völlig unterschiedliche Paradigmen.

Die Pipe ist ja ein abstraktes Objekt mit definierter Schnittstelle, ein Prozess gießt Daten rein, der andere nimmt sie entgegen.

Bei Shared Mem haben alle Prozesse mit notwenigen Zugriffsrechten die Möglichkeit wahlfrei darauf zuzugreifen. Ich muß mich also in der Regel auch um Synchronisation kümmern.

Ich kann also mit shmem auch Message Queues mit one:many Kommunikation realisieren. Aber im Endeffekt auch eine Pipe, sodenn ich wollte (Einfach nen Ringbuffer ins shmem+Synchronisierung).

Weil ich eben die Variante (der pipe) via shmem ansprach, Pipes werden auf OS-Level natürlich etwas anders realisiert, dadurch haben nur die beiden angeschlossenen Prozesse auch Zugriff auf den Puffer und nur über die vorgesehenen Funktionen. Synchronisierung wird erledigt. Eklatanter Nachteil: Nur 1:1 Kommunikation möglich, sogar noch präziser, nur Eltern-Kind Kommunikation, wenn man es genau nimmt - möchte ich beliebige Prozesse verrohren, dann muß ich das via fork() und exec() realisieren.

Etwas anders sieht es dann bei Named Pipes aus.