Die Pipelines arbeiten in Voreinstellung mit temporären Dateien,
genau: mit seek-baren, verschachtelten Dateiendabschnitten,
wahlweise (per -U, set -U) mit der Funktion pipe().
Das hat mehr Vorteile als pipe() Vorteile hat:
o Funktioniert mit allen Betriebssystemen.
o Man erhält eine temporäre Datei 'on the fly'.
o Diese Datei kann mittels 'seek' mehrfach gelesen werden.
o Es gibt keine (Lese-)Probleme mit Kommandos, die bei
'echten' pipe()s versagen.
(Kommandos, die keine ausdrücklichen Filterkommandos sind.)
o Die Prozesse werden nacheinander gestartet,
o sie können sich nicht gegenseitig stören,
o die momentane Prozeßlast ist geringer,
o der Exit ist von jedem in der Kette eindeutig erhältlich.
o SIGPIPE kann nicht vorkommen, bei vorzeitigem Beenden
eines Kommandos in der Pipe.
o Beliebige gewollte Rückwirkungen aus der Pipe-Kette
heraus sind möglich. (Nur 1 Prozeßkontext)
Vorteile von pipe():
o Der Datenstrom darf beliebig groß sein.
o Müßte prinzipiell schneller arbeiten,
zumindest bei großen Datenmengen pro Vorgang.
o Permanentes Monitoring ist möglich.
Echte Pipelines per -U/+U und set -/+U nur unter Unix.
(Siehe set-Kommando)
Beispiel Geschwindigkeit:
-------------------------
time bsh -pU -c "cat /usr/ARCH/3.tar | sum -ll"
time bsh -pU -c "cat /usr/ARCH/3.tar | sum -ll"
time bsh -p -c "cat /usr/ARCH/3.tar | sum -ll"
time bsh -p -c "sum -ll < /usr/ARCH/3.tar"
16580123892488523
1.99 real 0.06 user 0.26 sys
0.28 real 0.04 user 0.22 sys
4.99 real 0.07 user 1.56 sys
0.19 real 0.04 user 0.13 sys
(Datei 3.tar == 50 MB)
|