首页 > 解决方案 > Gnu Parallel:是否为每个作业并行重新加载程序?

问题描述

假设我有一个程序在运行之前加载重要内容……但这是一次减速。

接下来,我写:

cat ... | parallel -j 8 --spreadstdin --block $sz ... ./mycode

这会导致每个作业的负载开销吗?

如果它确实引起了开销,有没有办法避免它?

标签: bashparallel-processinggnu-parallel

解决方案


正如@Barmar 所说,./mycode在您的示例中为每个块启动。

但是由于您没有-k在示例中使用,因此您可以使用--round-robin.

... | parallel -j 8 --spreadstdin --round-robin --block $sz ... ./mycode

这将开始 8./mycode秒(但不是每个块一个),并为任何准备好读取的进程提供块。

此示例显示,由于 4 和 5 读取速度较慢,因此为进程 11 和 10 提供了比进程 4 和 5 更多的块:

seq 1000000 |
  parallel -j8 --tag --roundrobin --pipe --block 1k 'pv -qL {}0000 | wc' ::: 11 4 5 6 9 8 7 10

推荐阅读