Paralelize o script Bash com o número máximo de processos
Digamos que eu tenho um loop no Bash:
for foo in `some-command`
do
do-something $foo
done
do-something
é ligado à CPU e eu tenho um bom processador de 4 núcleos brilhante. Eu gostaria de poder executar até 4do-something
é de uma vez.
A abordagem ingênua parece ser:
for foo in `some-command`
do
do-something $foo &
done
Isso vai corrertudo do-something
s de uma só vez, mas há algumas desvantagens, principalmente que algo que pode fazer também pode ter alguma E / S significativa quetudo ao mesmo tempo pode diminuir um pouco. O outro problema é que esse bloco de código retorna imediatamente, portanto, não há como fazer outro trabalho quando todas asdo-something
s estão terminados.
Como você escreveria esse loop para que sempre haja Xdo-something
está funcionando de uma vez?