Предположим, я хочу найти все совпадения в сжатом текстовом файле:
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --rate
используется здесь для измерения пропускной способности трубы. На моей машине это около 420Mb / s (после распаковки).
Сейчас я пытаюсь сделать параллельный grep, используя GNU параллельно.
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
Теперь пропускная способность упала до ~ 260 Мбит / с. И что самое интересное, parallel
сам процесс использует много процессора. Больше чем grep
процессы (но меньше чем gzcat
).
РЕДАКТИРОВАТЬ 1 : я пробовал разные размеры блока ( --block
), а также разные значения для -N
/ -L
параметров. Ничто не помогает мне в этом пункте.
Что я делаю неправильно?
--pipe
это неэффективно? Я имею в виду, это какая-то фундаментальная проблема или конкретная реализация.