, глядя на как распараллелить задачи Баша, Я спотыкаюсь кода, как это:Как работает ограничение работы фона?
for item in "${items[@]}"
do
((i=i%THREADS)); ((i++==0)) && wait
process_item $item &
done
Где process_item
некоторый король функции/программа, которая работает с пунктом и THREADS
вара содержит максимальное количество фоновые процессы, которые могут выполняться одновременно.
Может кто-нибудь объяснить мне, как это работает? Я понимаю, что i=i%THREADS
гарантирует, что i
находится между 0
и THREADS-1
и что i++==0
приращений i
и проверяет, является ли оно 0
. Но есть wait
, связанный со всеми подпроцессами? Или как он знает, что нужно ждать, пока предыдущая партия перестанет обрабатывать?