假设我有一个程序在运行之前加载了很多内容...但这是一次缓慢的运行。
接下来,我写:
function(errormsg)
这会增加每个作业的负载开销吗?
如果确实引起了开销,有办法避免吗?
答案 0 :(得分:1)
parallel
对正在运行的程序的内部运作一无所知。每个实例都独立运行,因此无法将一个调用的初始化复制到其他实例。
如果您希望应用程序初始化一次,然后并行运行多个实例,则需要将其设计到应用程序本身中。它应该加载数据,然后使用fork()
创建使用此数据的多个进程。
答案 1 :(得分:1)
正如@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