PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : unnamed pipes



pablo
01-05-2007, 00:54
Hi,

es gibt ja die unnamed pipes mit denen verwandte prozesse miteinander kommunizieren koennen.

Mal folgendes Szenario angenommen, Prozess A (Parent) schreibt immer zwei Zahlen an Prozess B (Child).
Die beiden Zahlen werden mit jeden Mal um eins aufaddiert (in A). Prozess B soll dann jeweils nach erhalten eines Zahlenpaars, diese addieren und dann auf der stdout ausgeben.

A B
1 1 --> 1+1, gibt 2 aus
2 2 --> 2+2, gibt 4 aus
3 3 --> 3+3, gibt 6 aus
... etc

Nun habe ich wo gelesen, dass unnamed pipes im Gegensatz zu shared memory keine Synchronisationsmassnahmen erforden.
Nun frage ich mich wie das gemeint ist.
Denn zB in dem hier genannten Szenario, muss ja Prozess A warten bis Prozess B die beiden Zahlen verarbeitet und ausgegeben hat, bevor er den naechsten Zahlenwert in die pipe schreiben kann!?

Sprich ich braeuchte zusaetzlich zu der "Daten-pipe" von A nach B, auch noch eine Pipe in der Prozess B dem Prozess A mitteilt wenn er mit der verarbeitung und Ausgabe der daten fertig ist.

ich glaub ich bin etwas verwirt!?

RHBaum
02-05-2007, 11:47
in der Informatik eine gepufferte Datenverbindung zwischen zwei Prozessen nach dem First-In-First-Out-Prinzip

In der Praxis heisst das, dein prozess A schreibt in die Pipe, und dem ist wurscht was damit opassiert, solange die Pipe noch ganz ist(also daten entgegennimmt)


Denn zB in dem hier genannten Szenario, muss ja Prozess A warten bis Prozess B die beiden Zahlen verarbeitet und ausgegeben hat, bevor er den naechsten Zahlenwert in die pipe schreiben kann!?
Nein, eben genau nicht.
Dein prozess B liest aus der Pipe, was er kann. Hatt er nix zum lesen isses kein problem, kommt aber B mit lesen ned hinnerher, ist also langsamer als wie A schreibt, dann laeuft Deine Pipe voll ....

Das man keine Synchronisationsmassnahmen braucht, haengt mit den "einschraenkungen" einer Pipe zusammen. Es gibt nur einen der liest, und einen der schreibt, das ganze auch als Fifo beschraenkt, keinen wahlfreien zugriff. Damit gibt es schon mal wenig Möglichkeiten sich logisch ins gehege zu kommen.
Das BS verwaltet den Rest dann auch so, das es fuers multiprozessing unkritsich ist, du also keine externen locks brauchst.

Ciao ...