GNU Parallel es «una herramienta para ejecutar tareas en paralelo usando uno o varias computadoras». Es realmente compleja y versátil, pero muchas veces su uso se reduce a paralelizar un bucle. Algo así, para ejecutar 10 tasks utilizando 4 cores:
[code lang=»bash»]
task() {
echo «running $1…»
sleep $(($1%4))
echo «$1 stopped»
}
export -f task
for i in {1..10}; do
sem -j4 task $i
done
sem –wait
[/code]
Pero si no está disponible o da problemas, y no importa que la salida pueda intercalarse, se puede hacer lo mismo solo con Bash:
[code lang=»bash»]
task() {
echo «running $1…»
sleep $(($1%4))
echo «$1 stopped»
}
pmsem() { ((_i=_i%$1)); ((_i++==0)) && wait -n && ((_i–)); }
for i in {1..10}; do
pmsem 4; task $i &
done
wait
[/code]