⚡ 1. Multithreading & Concurrency im Terminal
Standard-Shell-Skripte laufen sequentiell in einem einzigen Prozess ab. Auf Multi-Core-CPUs (8, 16 oder 64 Kerne) verschenkt das enorme Rechenkapazität. Durch Parallelisierung teilen wir Arbeitslasten auf:
[Parallel -P 4] ├──> Worker 1: Task 1 ──┐
├──> Worker 2: Task 2 ──┼──> [wait] ──> Fertig (Gesamtzeit: ~1x)
├──> Worker 3: Task 3 ──┤
└──> Worker 4: Task 4 ──┘
# 🎯 1. xargs mit Parallelitäts-Flag -P (z.B. 4 parallele Prozesse):
cat domains.txt | xargs -P 4 -I {} curl -s -I "https://{}"
# 🎯 2. Native Bash Worker mit & und wait:
for file in *.log; do
analyze_log "$file" &
done
wait # Blockiert, bis ALLE Subshells im Hintergrund fertig sind
🏭 2. Didaktische Analogie: Die Supermarkt-Kassen
Sequentiell (Single-Threaded): 100 Kunden stehen an einer einzigen Kasse an. Kunde 1 zahlt, dann Kunde 2, usw. Die Schlange dauert 100 Minuten.
Parallel (xargs -P 4 / Worker Pool): Der Filialleiter öffnet 4 Kassen gleichzeitig. 4 Kunden werden parallel bedient. Die Gesamtdauer sinkt auf 25 Minuten!
Throttling: Wenn nicht unendlich Kassenpersonal da ist, begrenzt ein Pool (MAX_WORKERS) die Anzahl geöffneter Schalter, damit der Laden nicht im Chaos versinkt.
📑 3. Cheat-Sheet: Parallelisierungs-Werkzeuge
| Befehl / Syntax | Bedeutung | Beispiel |
|---|---|---|
xargs -P <N> -I {} |
Führt Befehl für jedes Item mit max. N Threads aus | cat urls.txt | xargs -P 8 -I {} curl -O {} |
command & |
Startet Befehl/Subshell asynchron im Hintergrund | backup_db & |
$! |
PID des zuletzt im Hintergrund gestarteten Prozesses | pids+=($!) |
wait "${pids[@]}" |
Wartet auf Beendigung aller gelisteten Prozess-IDs | wait "${pids[@]}" |
jobs -rp |
Listet PIDs aller aktuell laufenden Hintergrundjobs | [ $(jobs -rp | wc -l) -ge 4 ] |
🎯 Aufgaben & Checkliste in aufgabe.sh
Verwende nproc oder $(grep -c ^processor /proc/cpuinfo), um die Thread-Anzahl automatisch an die Hardware des Servers anzupassen!