假设我想在压缩文本文件中找到所有匹配项:
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --rate
在这里用于测量管道吞吐量。在我的机器上,解压缩后约为420Mb / s。
现在,我正在尝试使用GNU parallel做并行grep。
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
现在,吞吐量下降到〜260Mb / s。而且更有趣的parallel
过程本身就是使用大量CPU。大于grep
进程(但小于gzcat
)。
编辑1:我尝试了不同的块大小(--block
),以及-N
/ -L
选项的不同值。在这一点上没有任何帮助。
我究竟做错了什么?
--pipe
效率低下?我的意思是说这是某种基本问题,还是更多具体实施问题。