Распараллелить скрипт 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
работает сразу?