Bash 如何限制背景工作?

Bash 如何限制背景工作?,bash,parallel-processing,batch-processing,background-process,Bash,Parallel Processing,Batch Processing,Background Process,在研究如何并行化bash任务时,我遇到了如下代码: for item in "${items[@]}" do ((i=i%THREADS)); ((i++==0)) && wait process_item $item & done 其中,process\u item是与item一起工作的函数/程序,而线程var包含可以同时运行的最大后台进程数 有人能给我解释一下这是怎么回事吗?我知道I=I%THREADS确保I介于0和THREADS-1之间,并且I++==0增

在研究如何并行化bash任务时,我遇到了如下代码:

for item in "${items[@]}"
do
  ((i=i%THREADS)); ((i++==0)) && wait
  process_item $item &
done
其中,
process\u item
是与item一起工作的函数/程序,而
线程
var包含可以同时运行的最大后台进程数


有人能给我解释一下这是怎么回事吗?我知道
I=I%THREADS
确保
I
介于
0
THREADS-1
之间,并且
I++==0
增加
I
并检查它是否为
0
。但是
wait
是否绑定到所有子进程?或者,它如何知道is必须等到上一批停止处理

i++==0
检查并递增,而不是相反<代码>等待等待所有当前活动的子进程。因此,每次迭代(但由于
((i++==0))
)首先等待上一次迭代启动的流程,然后启动一个新流程。

这是一种模糊的编写方式

for item in "${items[@]}"
do
    # Every THREADSth job, stop and wait for everything
    # to complete.
    if (( i % THREADS == 0 )); then
        wait
    fi
    ((i++))
    process_item $item &
done
它实际上也不是很好用。它并不确保总是有
$THREADS
作业在运行,只确保一次运行的
$THREADS
作业不超过个