Распараллелить скрипт Bash с максимальным количеством процессов

Допустим, у меня есть цикл в Bash:

for foo in `some-command`
do
   do-something $foo
done

do-something связан с процессором, и у меня есть хороший блестящий 4-ядерный процессор. Я хотел бы иметь возможность работать до 4do-somethingэто сразу.

Наивный подход выглядит так:

for foo in `some-command`
do
   do-something $foo &
done

Это будет работатьвсе do-somethingСразу же, но есть пара недостатков, в основном, что делать что-то может также иметь какой-то значительный ввод-вывод, который выполняетвсе сразу может немного замедлиться. Другая проблема заключается в том, что этот блок кода возвращается немедленно, поэтому нет никакой возможности выполнить другую работу, когда всеdo-somethingс закончены.

Как бы вы написали этот цикл, чтобы всегда были Xdo-somethingработает сразу?

Ответы на вопрос(16)

Ваш ответ на вопрос