Poner múltiples trabajos en segundo plano es una buena manera de usar los múltiples núcleos de una sola máquina. parallel
sin embargo, le permite distribuir trabajos en varios servidores de su red. De man parallel
:
GNU parallel es una herramienta de shell para ejecutar trabajos en paralelo usando una o más computadoras . La entrada típica es una lista de archivos, una lista de hosts , una lista de usuarios, una lista de URL o una lista de tablas.
Incluso cuando se ejecuta en una sola computadora, parallel
le brinda un control mucho mayor sobre cómo se paralelizan sus trabajos. Tome este ejemplo de la man
página:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
OK, podrías hacer lo mismo con
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
Sin embargo, eso es más largo y engorroso y, lo que es más importante, lanzará tantos trabajos como .wav
archivos. Si ejecuta esto en unos pocos miles de archivos, es probable que ponga de rodillas a una computadora portátil normal. parallel
Por otro lado, lanzará un trabajo por núcleo de CPU y mantendrá todo bien y ordenado.
Básicamente, le parallel
ofrece la capacidad de ajustar cómo se ejecutan sus trabajos y qué cantidad de recursos disponibles deberían usar. Si realmente desea ver el poder de esta herramienta, consulte su manual o, al menos, los ejemplos que ofrece.
El fondo simple realmente no tiene nada cerca del nivel de sofisticación que se compara con el paralelo. En cuanto a cómo parallel
difiere xargs
, la multitud de GNU da un buen desglose aquí . Algunos de los puntos más destacados son:
- xargs trata mal con caracteres especiales (como espacio, 'y ").
- xargs puede ejecutar un número determinado de trabajos en paralelo, pero no tiene soporte para ejecutar trabajos de número de núcleos de CPU en paralelo.
- xargs no tiene soporte para agrupar la salida, por lo tanto, la salida puede ejecutarse juntos, por ejemplo, la primera mitad de una línea es de un proceso y la última mitad de la línea es de otro proceso.
- xargs no tiene soporte para mantener el orden de la salida, por lo tanto, si ejecuta trabajos en paralelo usando xargs, la salida del segundo trabajo no puede posponerse hasta que se complete el primer trabajo.
- xargs no tiene soporte para ejecutar trabajos en computadoras remotas.
- xargs no tiene soporte para reemplazar contexto, por lo que tendrá que crear los argumentos.
parallel
sintaxis, otra nueva marca de teclado-faceroll para memorizar. Pero supongo que el equilibrio automático entre núcleos / trabajos vale la pena ...