Mettre plusieurs tâches en arrière-plan est un bon moyen d’utiliser les multiples cœurs d’une même 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 de 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 lorsque vous travaillez sur un seul ordinateur, parallel
vous avez un contrôle bien plus grand sur la mise en parallèle de vos tâches. Prenons cet exemple de la man
page:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
OK, vous pourriez faire la même chose avec
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
Cependant, cela est plus long et plus lourd et, plus important encore, il lancera autant de tâches qu'il y a de .wav
fichiers. Si vous utilisez cela sur quelques milliers de fichiers, il est probable qu'un ordinateur portable normal se mettra à genoux. parallel
d’autre part, lancera un travail par cœur de processeur et veillera à ce que tout soit bien rangé.
En gros, parallel
vous offre la possibilité d’affiner la manière dont vos tâches sont exécutées et la quantité de ressources disponibles qu’elles devraient utiliser. Si vous voulez vraiment voir la puissance de cet outil, parcourez son manuel ou, à tout le moins, ses exemples.
Le décor simple n'a vraiment pas le niveau de sophistication comparable au parallèle. En ce qui concerne comment parallel
diffère de xargs
, la foule GNU donne une belle ventilation ici . Certains des points les plus saillants sont:
- xargs traite mal les caractères spéciaux (tels que espace, 'et ").
- xargs peut exécuter un nombre donné de travaux en parallèle, mais ne prend pas en charge l'exécution de travaux comportant un nombre de cpu-cœurs en parallèle.
- xargs ne prend pas en charge le regroupement de la sortie; par conséquent, la sortie peut être exécutée ensemble. Par exemple, la première moitié d'une ligne provient d'un processus et la dernière moitié de la ligne, d'un autre processus.
- xargs ne prend pas en charge le maintien de l'ordre de la sortie. Par conséquent, si vous exécutez des tâches en parallèle avec xargs, la sortie du deuxième travail ne peut pas être différée jusqu'à la fin du premier travail.
- xargs ne prend pas en charge l'exécution de travaux sur des ordinateurs distants.
- xargs ne prend pas en charge le remplacement de contexte, vous devrez donc créer les arguments.
parallel
syntaxe, encore une autre nouvelle marque de clavier-faceroll à mémoriser. Mais je suppose que l’équilibrage automatique entre cœurs / emplois en vaut la peine…?sem
ce qui fait partie du paquet GNU Parallel. Cela conviendrait peut-être mieux à vos besoins en syntaxe.parallel
c'est plus puissant quexargs
, mais cette comparaison est plutôt biaisée. Par exemple,xargs
prend en charge les chaînes à terminaison null en entrée pour éviter les problèmes d'espaces et de guillemets, et peut également-d
émulerparallel
(même mentionné dans la comparaison!).xargs -I
est un remplacement de contexte suffisant pour la plupart des cas simples, et je connais généralement le nombre de cœurs sur la machine. Je n'ai jamais rencontré de problème avec les sorties non groupées.