Supponiamo di voler trovare tutte le corrispondenze nel file di testo compresso:
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --rate
utilizzato qui per misurare la portata del tubo. Sulla mia macchina è di circa 420 Mb / s (dopo la decompressione).
Ora sto provando a fare grep in parallelo usando GNU parallel.
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
Ora il throughput viene ridotto a ~ 260 Mb / s. E ciò che è il parallel
processo più interessante stesso sta usando molta CPU. Più dei grep
processi (ma meno di gzcat
).
EDIT 1 : ho provato diverse dimensioni di blocco ( --block
), nonché diversi valori per -N
/ -L
options. Niente mi aiuta a questo punto.
Che cosa sto facendo di sbagliato?
--pipe
è inefficiente? Voglio dire, è una sorta di problema fondamentale o più di implementazione specifica.