Hay una lista completa de programas que pueden ejecutar trabajos en paralelo desde un shell, que incluso incluye comparaciones entre ellos, en la documentación de GNU paralelo. Hay muchas, muchas soluciones por ahí. Otra buena noticia es que probablemente sean bastante eficientes en la programación de trabajos para que todos los núcleos/procesadores se mantengan ocupados en todo momento.
Para hacer que las cosas se ejecuten en paralelo, use '&' al final de un comando de shell para ejecutarlo en segundo plano, luego wait
esperará de forma predeterminada (es decir, sin argumentos) hasta que finalicen todos los procesos en segundo plano. Entonces, tal vez inicie 10 en paralelo, luego espere, luego haga otros diez. Puede hacerlo fácilmente con dos bucles anidados.
Otra forma muy útil de hacer esto es con gnu paralelo, que bien vale la pena instalar si aún no lo tiene; esto es invaluable si las tareas no toman necesariamente la misma cantidad de tiempo.
seq 1000 | parallel -j 8 --workdir $PWD ./myrun {}
lanzará ./myrun 1
, ./myrun 2
, etc., asegurándose de que se estén ejecutando 8 trabajos a la vez. También puede tomar listas de nodos si desea ejecutar en varios nodos a la vez, por ejemplo, en un trabajo de PBS; nuestras instrucciones para nuestros usuarios sobre cómo hacerlo en nuestro sistema están aquí.
Actualizado para agregar: Quiere asegurarse de que está usando gnu-parallel, no la utilidad más limitada del mismo nombre que viene en el paquete moreutils (aquí se describe la historia divergente de los dos).
Echa un vistazo a las subcapas de bash, se pueden usar para ejecutar partes de un script en paralelo.
No he probado esto, pero esto podría ser un comienzo:
#!/bin/bash
for i in $(seq 1 1000)
do
( Generating random numbers here , sorting and outputting to file$i.txt ) &
if (( $i % 10 == 0 )); then wait; fi # Limit to 10 concurrent subshells.
done
wait