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?
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 pipe
Informationen zum Sicherstellen, dass ein Schreibvorgang atomar ist, finden Sie unter.quelle