GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gnu Parallel Vs &(ich meine Hintergrund) Vs Xargs -p?

Ich bin verwirrt über den Unterschied oder Vorteil (falls vorhanden), eine Reihe von Aufgaben in einer .sh auszuführen Skript mit GNU parallel

Z.B. Antwort von Ole Tange:

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

anstatt sie in einer Schleife zu durchlaufen und sie in den Hintergrund zu stellen & .

Z.B. Antwort von frostschutz:

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

Kurz gesagt, sind sie nur syntaktisch oder praktisch unterschiedlich? Und wenn praktisch unterschiedlich, wann sollte ich sie verwenden?

Akzeptierte Antwort:

Mehrere Jobs in den Hintergrund zu stellen, ist eine gute Möglichkeit, die mehreren Kerne einer einzelnen Maschine zu nutzen. parallel ermöglicht es Ihnen jedoch, Jobs auf mehrere Server Ihres Netzwerks zu verteilen. Von man parallel :

GNU parallel ist ein Shell-Tool zum parallelen Ausführen von Jobs unter Verwendung
eines oder mehrerer Computer . Die typische Eingabe ist eine Liste von
Dateien, eine Liste von Hosts , eine Liste von Benutzern, eine Liste von URLs oder eine Liste von Tabellen.

Auch bei Ausführung auf einem einzelnen Computer parallel gibt Ihnen eine viel größere Kontrolle darüber, wie Ihre Jobs parallelisiert werden. Nehmen Sie dieses Beispiel von man Seite:

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

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

OK, Sie könnten dasselbe mit

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

Das ist jedoch länger und umständlicher und, was noch wichtiger ist, es werden so viele Jobs gestartet, wie es .wav gibt Dateien. Wenn Sie dies auf ein paar tausend Dateien ausführen, wird es wahrscheinlich einen normalen Laptop in die Knie zwingen. parallel auf der anderen Seite startet einen Job pro CPU-Kern und hält alles sauber und ordentlich.

Grundsätzlich parallel bietet Ihnen die Möglichkeit, genau einzustellen, wie Ihre Jobs ausgeführt werden und wie viele verfügbare Ressourcen sie verwenden sollen. Wenn Sie wirklich die Leistungsfähigkeit dieses Tools sehen möchten, gehen Sie sein Handbuch durch oder zumindest die Beispiele, die es bietet.

Einfaches Backgrounding hat wirklich bei weitem nicht den Grad an Raffinesse, der mit Parallel verglichen werden könnte. Wie für parallel unterscheidet sich von xargs , die GNU-Crowd gibt hier eine schöne Aufschlüsselung. Einige der hervorstechenderen Punkte sind:

  • xargs geht schlecht mit Sonderzeichen (wie Leerzeichen, ‘ und “) um.
  • xargs kann eine bestimmte Anzahl von Jobs parallel ausführen, unterstützt jedoch nicht die parallele Ausführung von Jobs mit der Anzahl von CPU-Kernen.
  • xargs bietet keine Unterstützung für das Gruppieren der Ausgabe, daher kann die Ausgabe zusammenlaufen, z. die erste Hälfte einer Zeile stammt von einem Prozess und die letzte Hälfte der Zeile von einem anderen Prozess.
  • xargs hat keine Unterstützung für die Beibehaltung der Reihenfolge der Ausgabe, daher kann die Ausgabe des zweiten Jobs nicht verschoben werden, bis der erste Job fertig ist, wenn Jobs parallel mit xargs ausgeführt werden.
  • xargs bietet keine Unterstützung für die Ausführung von Jobs auf Remote-Computern.
  • xargs unterstützt keine Kontextersetzung, daher müssen Sie die Argumente erstellen.
Verwandte:Ist die Schaltung ein paralleler RLC, wenn sich zwischen Kondensator und Induktor eine Spannungsquelle befindet?
Linux
  1. Wie bekomme ich die Prozess-ID des Hintergrundprozesses?

  2. Paralleler Download mit dem Curl-Befehlszeilendienstprogramm

  3. GNU-Sortierung nach Groß- und Kleinschreibung

  4. Was bedeutet ein Punkt nach den Dateiberechtigungsbits?

  5. Parallelisieren Sie rsync mit GNU Parallel

Einführung in GNU Autotools

Erledigen Sie mit GNU Parallel mehr über die Linux-Befehlszeile

Xargs-Befehl unter Linux

Ein Leitfaden für Anfänger zu Cron-Jobs

Fehlerbehebung bei Cron-Jobs

Lernen Sie Multithreading-Bash-Skripte mit GNU Parallel