mkfifo - Treten tatsächlich Festplatten-E / A auf?

10

Ich habe 2 Bewerbungen:

  • Produzent (N Instanzen)
  • Verbraucher (1 Instanz)

Ich schreibe zur Zeit auf Zwischenergebnisse von den Produzenten, und dann liest der Verbraucher diese Dateien von der Festplatte und erzeugt ein endgültiges Ergebnis.

Ich möchte diese E / A minimieren, indem ich die Ausgaben der Produzenten direkt an den Verbraucher "streame".

Ich bin auf Named Pipes (mkfifo) und ein nachfolgendes Beispiel hier gestoßen . Das sieht gut aus, aber ich kann nicht feststellen, wie dies tatsächlich implementiert wird? Wird die FIFO-Warteschlange nur durch eine Datei gepuffert? Wenn ja, würde mir das wahrscheinlich nicht helfen. Ich möchte, dass der Inhalt "durch den Speicher" vollständig gestreamt wird, ohne die Festplatte zu verwenden. Vielleicht ist dies nicht prozessübergreifend möglich?

Jmoney38
quelle

Antworten:

10

Keine Festplatten-E / A (außer vielleicht beim Navigieren durch das Dateisystem, um die FIFO-Datei zu öffnen.)

Aus der Linux fifo (7) Manpage :

Eine FIFO-Spezialdatei (eine Named Pipe) ähnelt einer Pipe, nur dass auf sie als Teil des Dateisystems zugegriffen wird. [...] Wenn Prozesse Daten über das FIFO austauschen, leitet der Kernel alle Daten intern weiter, ohne sie in das Dateisystem zu schreiben. Somit hat die FIFO-Spezialdatei keinen Inhalt im Dateisystem; Der Dateisystemeintrag dient lediglich als Referenzpunkt, damit Prozesse unter Verwendung eines Namens im Dateisystem auf die Pipe zugreifen können.

Mark Plotnick
quelle
Perfekt. Ich habe die Manpage für mkfifo gelesen, aber nicht daran gedacht, nach einer Seite über "fifo" zu suchen - Danke!
Jmoney38
3

Es spielt keine Rolle, ob Ihr Ergebnis tatsächlich festplattengesichert ist oder nicht, denn wenn genügend Speicher verfügbar ist, wird es trotzdem zwischengespeichert und es wird keine tatsächliche Festplatten-E / A ausgeführt. Im Gegenteil, wenn es speichergestützt ist und nicht genügend Speicher verfügbar ist, kann es auf die Festplatte übertragen werden.

Wenn ich raten würde, würde ich sagen, dass Pipe tatsächlich speicherbasiert ist, aber dies sollte nur ändern, ob Daten in der Warteschlange zwischen Neustarts erhalten bleiben.

Was Sie beachten sollten, ist, dass Ihre Schreibvorgänge atomar sein müssen, da Sie mehrere Produzenten haben, damit sie nicht in der Warteschlange verschachtelt sind. Weitere man 7 pipeInformationen zum Sicherstellen, dass ein Schreibvorgang atomar ist, finden Sie unter.

pqnet
quelle