Diciamo che ho un ciclo in Bash:
for foo in `some-command`
do
do-something $foo
done
do-somethingè legato alla CPU e ho un bel processore a 4 core. Mi piacerebbe essere in grado di eseguire fino a 4 do-somethingalla volta.
L'approccio ingenuo sembra essere:
for foo in `some-command`
do
do-something $foo &
done
Questo funzionerà tutti do-something in una volta, ma ci sono un paio di aspetti negativi, principalmente che fare qualcosa può anche avere un I / O significativo che eseguire tutto in una volta potrebbe rallentare un po '. L'altro problema è che questo blocco di codice ritorna immediatamente, quindi non c'è modo di fare altro lavoro quando tutti do-somethingi messaggi sono finiti.
Come scriveresti questo ciclo in modo che ci siano sempre X in do-somethingesecuzione contemporaneamente?