Предположим, что у меня есть петля в Bash:
for foo in `some-command`
do
do-something $foo
done
do-something
привязан к cpu, и у меня красивый блестящий 4-ядерный процессор. Я хотел бы иметь возможность запускать до 4 do-something
сразу.
Наивный подход выглядит следующим образом:
for foo in `some-command`
do
do-something $foo &
done
Это будет запускать все do-something
сразу, но есть пара недостатков, в основном, что-то-то, возможно, также имеет некоторые значительные операции ввода-вывода, которые все одновременно могут немного замедлить. Другая проблема заключается в том, что этот блок кода немедленно возвращается, поэтому невозможно выполнить другую работу, когда все do-something
завершены.
Как бы вы пишете этот цикл, чтобы всегда выполнялось X do-something
?