GNU/Linux >> Tutoriels Linux >  >> Linux

Gnu Parallel Vs &(i Mean Background) Vs Xargs -p ?

Je ne comprends pas la différence ou l'avantage (le cas échéant) d'exécuter un ensemble de tâches dans un .sh script utilisant GNU parallel

Par exemple. Réponse d'Ole Tange :

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

plutôt que de les parcourir en boucle en les mettant en arrière-plan & .

Par exemple. Réponse 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 bref, sont-ils simplement syntaxiquement ou pratiquement différents ? Et s'ils sont pratiquement différents, quand dois-je les utiliser ?

Réponse acceptée :

Mettre plusieurs tâches en arrière-plan est un bon moyen d'utiliser les multiples cœurs d'une seule machine. parallel cependant, vous permet de répartir les tâches sur plusieurs serveurs de votre réseau. De man parallel :

GNU parallel est un outil shell permettant d'exécuter des tâches en parallèle à l'aide d'
un ou plusieurs ordinateurs . L'entrée typique est une liste de
fichiers, une liste d'hôtes , une liste d'utilisateurs, une liste d'URL ou une liste de tables.

Même lors de l'exécution sur un seul ordinateur, parallel vous donne un bien meilleur contrôle sur la façon dont vos travaux sont parallélisés. Prenez cet exemple du man page :

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

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

OK, vous pouvez faire la même chose avec

   for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done

Cependant, c'est plus long et plus lourd et, surtout, cela lancera autant de tâches qu'il y a de .wav des dossiers. Si vous l'exécutez sur quelques milliers de fichiers, cela risque de mettre un ordinateur portable normal à genoux. parallel d'autre part, lancera une tâche par cœur de processeur et gardera tout bien rangé.

Fondamentalement, parallel vous offre la possibilité d'affiner la façon dont vos travaux sont exécutés et la quantité de ressources disponibles qu'ils doivent utiliser. Si vous voulez vraiment voir la puissance de cet outil, parcourez son manuel ou, à tout le moins, les exemples qu'il propose.

L'arrière-plan simple n'a vraiment pas le niveau de sophistication à comparer au parallèle. Quant à savoir comment parallel diffère de xargs , la foule GNU donne une belle répartition ici. Certains des points les plus saillants sont :

  • xargs gère mal les caractères spéciaux (tels que l'espace, " et ").
  • xargs peut exécuter un nombre donné de tâches en parallèle, mais ne prend pas en charge l'exécution de tâches multicœurs en parallèle.
  • xargs n'a pas de support pour regrouper la sortie, donc la sortie peut fonctionner ensemble, par ex. la première moitié d'une ligne provient d'un processus et la dernière moitié de la ligne provient d'un autre processus.
  • xargs ne prend pas en charge le maintien de l'ordre de la sortie. Par conséquent, si des tâches sont exécutées en parallèle à l'aide de xargs, la sortie de la deuxième tâche ne peut pas être reportée jusqu'à ce que la première tâche soit terminée.
  • xargs ne prend pas en charge l'exécution de tâches sur des ordinateurs distants.
  • xargs ne prend pas en charge le remplacement de contexte, vous devrez donc créer les arguments.
Connexe :le circuit est-il un RLC parallèle s'il y a une source de tension entre le condensateur et l'inductance ?
Linux
  1. Comment copier un fichier dans plusieurs répertoires à l'aide de la commande gnu cp

  2. Comment obtenir l'ID de processus du processus d'arrière-plan ?

  3. Téléchargement parallèle à l'aide de l'utilitaire de ligne de commande Curl

  4. Processus Linux en arrière-plan - Arrêté dans les travaux ?

  5. Tri GNU sensible à la casse

Commande Xargs sous Linux

Un guide du débutant sur les tâches Cron

Exécuter des commandes canalisées en parallèle ?

Apprenez les scripts Bash multi-threading avec GNU Parallel

Bg, Fg, &, Ctrl-Z - 5 exemples pour gérer les tâches d'arrière-plan Unix

Que signifie un point après les bits d'autorisation de fichier ?