Предположим, я хочу найти все совпадения в сжатом текстовом файле:
$ 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это неэффективно? Я имею в виду, это какая-то фундаментальная проблема или конкретная реализация.