Parallelize Bash script con número máximo de procesos
Digamos que tengo un bucle en Bash:
for foo in `some-command`
do
do-something $foo
done
do-something
está vinculado a la CPU y tengo un bonito y brillante procesador de 4 núcleos. Me gustaría poder correr hasta 4do-something
Es a la vez.
El enfoque ingenuo parece ser:
for foo in `some-command`
do
do-something $foo &
done
Esto correrátodas do-something
s a la vez, pero hay un par de inconvenientes, principalmente que hacer algo también puede tener algunas E / S significativas que funcionantodas a la vez podría disminuir un poco. El otro problema es que este bloque de código vuelve inmediatamente, por lo que no hay forma de hacer otro trabajo cuando todo eldo-something
s están terminados.
¿Cómo escribirías este bucle para que siempre haya Xdo-something
s corriendo a la vez?