So verwenden Sie eine Multi-Core-CPU, um Ihre Linux-Befehle zu beschleunigen (GNU Parallel)

So verwenden Sie eine Multi-Core-CPU, um Ihre Linux-Befehle zu beschleunigen (GNU Parallel)

Mussten Sie schon einmal sehr große Datenmengen (Hunderte von GB) verarbeiten? Oder darin suchen oder eine andere Operation durchführen – etwas, das nicht parallelisiert werden kann. Datenexperten, ich spreche mit Ihnen. Sie verfügen möglicherweise über eine CPU mit 4 oder mehr Kernen, aber unsere entsprechenden Tools wie grep, bzip2, wc, awk, sed usw. sind Single-Thread-Tools und können nur einen CPU-Kern verwenden.

Um die Zeichentrickfigur Cartman zu paraphrasieren: „Wie kann ich diese Kerne verwenden?“

Damit Linux-Befehle alle CPU-Kerne nutzen, müssen wir den GNU Parallel-Befehl verwenden, der es allen CPU-Kernen ermöglicht, magische Map-Reduce-Operationen in einer einzigen Maschine durchzuführen. Natürlich erfordert dies auch die Hilfe des selten verwendeten Parameters –pipes (auch –spreadstdin genannt). Auf diese Weise wird Ihre Last tatsächlich gleichmäßig auf die CPUs verteilt.

BZIP2

bzip2 ist ein besseres Komprimierungstool als gzip, aber es ist langsam! Keine Sorge, wir haben eine Möglichkeit, dieses Problem zu lösen.

Bisherige Praxis:

cat bigfile.bin | bzip2 --best > komprimierteDatei.bz2

Jetzt so:

cat bigfile.bin | parallel --pipe --recend '' -k bzip2 --best > komprimierte Datei.bz2

Insbesondere für bzip2 ist GNU Parallel auf Multi-Core-CPUs superschnell. Ehe man es weiß, ist es erledigt.

GREP

Wenn Sie eine sehr große Textdatei haben, haben Sie möglicherweise bereits Folgendes getan:

grep-Muster bigfile.txt

Jetzt können Sie Folgendes tun:

cat bigfile.txt | parallel --pipe grep 'Muster'

Oder so:

cat bigfile.txt | parallel --block 10M --pipe grep 'Muster'

Bei dieser zweiten Verwendung wird der Parameter --block 10M verwendet, was bedeutet, dass jeder Kern 10 Millionen Zeilen verarbeitet. Mit diesem Parameter können Sie anpassen, wie viele Datenzeilen von jedem CPU-Kern verarbeitet werden.

AWK

Unten sehen Sie ein Beispiel für die Verwendung des awk-Befehls zum Berechnen einer sehr großen Datendatei.

Allgemeine Verwendung:

Katze rands20M.txt | awk '{s+=$1} END {print s}'

Jetzt so:

cat rands20M.txt | parallel --pipe awk \'{s+=\$1} END {print s}\' | awk '{s+=$1} END {print s}'

Dies ist etwas kompliziert: Der Parameter --pipe im parallelen Befehl unterteilt die Cat-Ausgabe in mehrere Blöcke und leitet sie an den Awk-Aufruf weiter, wodurch viele Unterberechnungsvorgänge entstehen. Diese Unterberechnungen werden über eine zweite Pipeline in denselben awk-Befehl weitergeleitet, der das Endergebnis ausgibt. Das erste awk hat drei Backslashes, die von GNU parallel zum Aufruf von awk benötigt werden.

WC

Möchten Sie die Anzahl der Zeilen in einer Datei so schnell wie möglich zählen?

Traditioneller Ansatz:

wc -l großeDatei.txt

Jetzt sollten Sie Folgendes haben:

cat bigfile.txt | parallel --pipe wc -l | awk '{s+=$1} END {print s}'

Sehr clever: Verwenden Sie zunächst den parallelen Befehl, um eine große Anzahl von wc -l-Aufrufen in Unterberechnungen zu „zuordnen“, und senden Sie sie schließlich zur Aggregation über die Pipe an awk.

SED

Möchten Sie den Befehl sed verwenden, um viele Ersetzungsvorgänge in einer großen Datei durchzuführen?

Konventionelle Praxis:

sed s^alt^neu^g bigfile.txt

Jetzt können Sie:

cat bigfile.txt | parallel --pipe sed s^alt^neu^g

… und dann können Sie die Pipe verwenden, um die Ausgabe in einer bestimmten Datei zu speichern.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • 15-minütiges paralleles Artefakt GNU Parallel Erste Schritte

<<:  So installieren Sie die grüne Version von MySQL Community Server 5.7.16 und implementieren die Remote-Anmeldung

>>:  Einfache Analyse von EffectList in React

Artikel empfehlen

Kompatibilität mit der Inline-Block-Eigenschaft

<br />Vor einem Jahr gab es im Internet kein...

Tutorial zur Installation des GreasyFork-JS-Skripts auf dem Mobiltelefon

Inhaltsverzeichnis Vorwort 1. Iceraven-Browser (F...

Benutzerdefinierte optionale Zeitkalenderkomponente von Vue

In diesem Artikelbeispiel wird der spezifische Co...

11 Möglichkeiten, Duplikate aus JS-Arrays zu entfernen

Bei der tatsächlichen Arbeit oder bei Interviews ...

Eine Minute, um die Laufruhe von HTML+Vue+Element-UI zu erleben

Technik-Fan html-Webseite, müssen Sie wissen Von ...

Neue Funktionen in MySQL 8.0: Hash Join

Das MySQL-Entwicklungsteam hat am 14. Oktober 201...

Führen Sie die Schritte zur Verwendung von mock.js im Vue-Projekt aus

Verwenden von mock.js im Vue-Projekt Auswahl des ...

Eingabetyp begrenzen (mehrere Methoden)

1. Es können nur chinesische Schriftzeichen eingeg...

Einige Parameterbeschreibungen von Texteingabefeldern im Webdesign

In Gästebüchern, Foren und anderen Orten werden i...

Detaillierte Erklärung der Eigenschaften und Funktionen von Vuex

Inhaltsverzeichnis Was ist Vuex? Fünf Eigenschaft...

Mehrere Möglichkeiten, die Lesbarkeit von Webseiten zu verbessern

1. Verwenden Sie kontrastierende Farben. Mit Kont...