Wenn Sie mehrere Jobs in den Hintergrund stellen, können Sie die mehreren Kerne einer einzelnen Maschine gut nutzen. parallel
Ermöglicht es Ihnen jedoch, Aufträge auf mehrere Server Ihres Netzwerks zu verteilen. Von man parallel
:
GNU parallel ist ein Shell-Tool zum parallelen Ausführen von Jobs auf einem oder mehreren Computern . 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.
Selbst wenn Sie auf einem einzelnen Computer ausgeführt werden, haben parallel
Sie weitaus mehr Kontrolle darüber, wie Ihre Jobs parallelisiert werden. Nehmen Sie dieses Beispiel von der man
Seite:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
OK, das könnte man auch mit machen
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
Dies ist jedoch länger und umständlicher und führt vor allem dazu, dass so viele Jobs gestartet werden, wie .wav
Dateien vorhanden sind . Wenn Sie dies mit ein paar tausend Dateien ausführen, wird wahrscheinlich ein normaler Laptop in die Knie gezwungen. parallel
Auf der anderen Seite wird ein Job pro CPU-Kern gestartet und alles schön aufgeräumt.
Bietet parallel
Ihnen im Grunde die Möglichkeit, die Ausführung Ihrer Jobs und die Menge der verfügbaren Ressourcen, die sie verwenden sollten, zu optimieren. Wenn Sie die Leistungsfähigkeit dieses Tools wirklich sehen möchten, lesen Sie das Handbuch oder zumindest die darin enthaltenen Beispiele.
Einfache Hintergründe haben wirklich nicht annähernd das Niveau von Raffinesse, das man mit Parallelen vergleichen kann. Was , wie parallel
unterscheidet sich von xargs
, bevölkern die GNU einen schönen Zusammenbruch geben hier . Einige der wichtigsten Punkte sind:
- xargs behandelt Sonderzeichen (wie Leerzeichen, 'und ") schlecht.
- xargs kann eine bestimmte Anzahl von Jobs gleichzeitig ausführen, unterstützt jedoch nicht die parallele Ausführung von Jobs mit einer Anzahl von CPU-Kernen.
- xargs unterstützt keine Gruppierung der Ausgabe, daher kann die Ausgabe zusammen ausgeführt werden, z. B. stammt die erste Hälfte einer Zeile von einem Prozess und die letzte Hälfte der Zeile von einem anderen Prozess.
- xargs unterstützt die Beibehaltung der Ausgabereihenfolge nicht. Wenn also Jobs mit xargs parallel ausgeführt werden, kann die Ausgabe des zweiten Jobs erst verschoben werden, wenn der erste Job ausgeführt wurde.
- xargs unterstützt die Ausführung von Jobs auf Remotecomputern nicht.
- Da xargs das Ersetzen von Kontexten nicht unterstützt, müssen Sie die Argumente erstellen.
parallel
Syntax, noch eine neue Marke von Tastatur-Faceroll zu merken. Aber ich denke, das automatische Ausgleichen zwischen Kernen / Jobs lohnt sich ...?sem
welches Teil des GNU Parallel-Pakets ist. Das könnte Ihren Syntaxanforderungen besser entsprechen.parallel
ist zwar mächtiger alsxargs
, aber dieser Vergleich ist eher voreingenommen. Zum Beispielxargs
unterstützt nullterminierten Strings als Eingabe zu vermeiden Probleme mit Leerzeichen und Anführungszeichen, und kann auch-d
zu emulierenparallel
(auch im Vergleich erwähnt!).xargs -I
ist für die meisten einfachen Fälle ein ausreichender Kontextersatz, und ich kenne normalerweise die Anzahl der Kerne auf der Maschine. Ich habe nie ein Problem mit nicht gruppierten Ausgaben festgestellt.