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

Sind Unix/Linux-Pipes hersteller- oder verbraucherorientiert?

Pipes in Unix haben einen Puffer, selbst wenn der rechte Prozess (RSP) keine Daten verbraucht, kann der linke Prozess (LSP) einige Kilobyte produzieren, bevor er blockiert.

Wenn der Puffer dann voll wird, wird der LSP schließlich blockiert. Wenn der RSP Daten liest, gibt er einen Teil oder den gesamten Pufferspeicherplatz frei und der LSP nimmt die Operation wieder auf.

Wenn Sie statt 2 Prozesse 3 haben, ist die Situation mehr oder weniger dieselbe:Ein schnellerer Erzeuger wird von einem langsameren Verbraucher blockiert. Und offensichtlich wird ein schneller Verbraucher von einem langsameren Erzeuger blockiert, wenn die Pipe leer wird:Denken Sie nur an eine interaktive Shell, die auf den langsamsten Erzeuger von allen wartet:den Benutzer.

Zum Beispiel der folgende Befehl:

$ yes | cat | more

Seit more blockiert, wenn der Bildschirm voll ist, bis der Benutzer eine Taste drückt, die cat Prozess wird seinen Ausgabepuffer füllen und anhalten, dann yes Prozess wird seinen Puffer füllen und auch anhalten. Alles wartet darauf, dass der Benutzer fortfährt, wie es sein sollte.

PS:Als interessanter Fakt gilt:was passiert bei der more Prozess endet? Nun, die rechte Seite dieser Röhre ist geschlossen, also die cat Der Prozess erhält einen SIGPIPE Signal (wenn es jemals wieder in die Pipe schreibt, und es wird) und wird sterben. Dasselbe wird mit yes passieren Prozess. Alle Prozesse sterben, wie es sein sollte.


A hat eine Leitung zu B und B hat eine Leitung zu C. Jede Leitung hat einen Puffer; B und C blockieren, wenn sie versuchen zu lesen, und es ist keine Eingabe verfügbar (das Ende des Streams zählt als Eingabe). A und B blockieren, wenn sie eine Ausgabe zum Schreiben haben, aber der Puffer der Pipe voll ist.

Alle drei Prozesse werden gleichzeitig ausgeführt und verbrauchen so viel CPU wie möglich. Das Betriebssystem blockiert sie im Lese-/Schreibsystemaufruf nach Bedarf, wenn der Pipe-Puffer erschöpft bzw. voll ist.

Sie werden also sowohl vom Verbraucher als auch vom Produzenten angetrieben, das heißt, die Rate ist das Minimum sowohl der Konsumrate als auch der Produktionsrate. Wenn der Konsument schneller ist, wird die Leistung vom Produzenten bestimmt, und vv.


Linux
  1. Überblick über UNIX-Prozesse (innerhalb eines Linux-Prozesses und Prozesstypen)

  2. UNIX-/Linux-Prozesse:C fork()-Funktion

  3. UNIX / Linux :Wie man die Nettigkeit (Priorität) eines Prozesses ändert

  4. Ist Linux ein Unix?

  5. Sind Linux-Kernel-Threads wirklich Kernel-Prozesse?

Was sind Pipes unter Linux? Wie funktioniert die Pipe-Umleitung?

Linux gegen Unix

UNIX / Linux:7 praktische Beispiele für PS-Befehle zur Prozessüberwachung

UNIX / Linux:Was ist eine Shell? Was sind verschiedene Muscheln?

Maximale Speicherauslastung eines Linux/Unix-Prozesses

So sehen Sie den Prozess, der von einem bestimmten Benutzer in Unix/Linux erstellt wurde