Angenommen, ich möchte alle Übereinstimmungen in einer komprimierten Textdatei finden:
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --ratewird hier zur Messung des Rohrdurchsatzes verwendet. Auf meinem Computer sind es ungefähr 420 MBit / s (nach der Dekomprimierung).
Jetzt versuche ich paralleles grep mit GNU parallel zu machen.
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
Jetzt sinkt der Durchsatz auf ~ 260 MBit / s. Und was noch interessanter parallelist, ist, dass viel CPU verbraucht wird. Mehr als grepProzesse (aber weniger als gzcat).
EDIT 1 : Ich habe verschiedene Blockgrößen ( --block) sowie verschiedene Werte für -N/ -Loptions ausprobiert . An dieser Stelle hilft mir nichts.
Was mache ich falsch?
--pipees ineffizient ist? Ich meine, ist es ein grundlegendes Problem oder eher ein spezifisches Implementierungsproblem?