GNU/Linux >> Tutoriales Linux >  >> Linux

Gnu Parallel Vs &(Me refiero a fondo) Vs Xargs -p?

Estoy confundido acerca de la diferencia o la ventaja (si la hay) de ejecutar un conjunto de tareas en un .sh script usando GNU parallel

P.ej. Respuesta de Ole Tange:

parallel ./pngout -s0 {} R{} ::: *.png

en lugar de decir recorrerlos colocándolos en segundo plano & .

P.ej. Respuesta de Frostschutz:

#copied from the link for illustration
for stuff in things
do
( something
  with
  stuff ) &
done
wait # for all the something with stuff

En resumen, ¿son solo sintácticamente o prácticamente diferentes? Y si son prácticamente diferentes, ¿cuándo debo usar cada uno?

Respuesta aceptada:

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 repartir trabajos entre múltiples servidores de su red. De man parallel :

GNU paralelo 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 da un control mucho mayor sobre cómo se paralelizan sus trabajos. Toma este ejemplo del man página:

   To convert *.wav to *.mp3 using LAME running one process per CPU core
   run:

   parallel lame {} -o {.}.mp3 ::: *.wav

Vale, 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 hay. 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, iniciará un trabajo por núcleo de CPU y mantendrá todo limpio y ordenado.

Básicamente, parallel le ofrece la capacidad de ajustar cómo se ejecutan sus trabajos y cuántos recursos disponibles deben usar. Si realmente quieres ver el poder de esta herramienta, revisa su manual o, al menos, los ejemplos que ofrece.

El fondo simple realmente no tiene el nivel de sofisticación que se compara con el paralelo. En cuanto a cómo parallel difiere de xargs , la gente de GNU da un buen desglose aquí. Algunos de los puntos más destacados son:

  • xargs trata mal los 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 junta, p. 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 se ejecutan trabajos en paralelo usando xargs, la salida del segundo trabajo no se puede posponer hasta que se complete el primer trabajo.
  • xargs no admite la ejecución de trabajos en equipos remotos.
  • xargs no admite reemplazo de contexto, por lo que tendrá que crear los argumentos.
Relacionado:¿Es el circuito un RLC paralelo si hay una fuente de voltaje entre el capacitor y el inductor?
Linux
  1. Bg, Fg, &, Ctrl-Z:5 ejemplos para administrar trabajos en segundo plano de Unix

  2. Cómo copiar un archivo a varios directorios usando el comando gnu cp

  3. ¿Cómo obtener el ID de proceso del proceso en segundo plano?

  4. ¿Qué significa un punto después de los bits de permiso del archivo?

  5. Paralelice rsync usando GNU Parallel

Comando Xargs en Linux

Una guía para principiantes sobre los trabajos de Cron

Solución de problemas de trabajos cron

¿Ejecutar comandos canalizados en paralelo?

Aprenda secuencias de comandos Bash multihilo con GNU Parallel

Xargs separados por saltos de línea