Thread (Faden)
Kurz: Ein Thread ist ein eigener Ausführungsstrang innerhalb eines Prozesses. Mehrere Threads laufen scheinbar oder tatsächlich gleichzeitig und teilen sich denselben Speicher.
Genauer: Threads erlauben, Wartezeiten zu überbrücken (Netzwerk, Datei), Rechenarbeit auf mehrere CPU-Kerne zu verteilen und Oberflächen reaktionsfähig zu halten. Der gemeinsame Speicher macht sie mächtig und gefährlich: Ohne Absicherung entstehen Race Conditions und Deadlocks.
Im Detail
import threading
ergebnisse = []
def arbeite(n):
ergebnisse.append(n * n)
threads = [threading.Thread(target=arbeite, args=(i,)) for i in range(5)]
for t in threads:
t.start()
for t in threads:
t.join() # warten, bis alle fertig sind
print(sorted(ergebnisse)) # [0, 1, 4, 9, 16]Prozess oder Thread?
| Prozess | Thread | |
|---|---|---|
| Speicher | eigener, getrennt | geteilt mit anderen Threads des Prozesses |
| Erzeugen | teuer | günstig |
| Kommunikation | Pipes, Sockets, Shared Memory | direkt über gemeinsame Variablen |
| Absturz | isoliert | kann den ganzen Prozess mitreißen |
Nebenläufigkeit in der Praxis
- Thread-Pools begrenzen die Zahl der Threads und verteilen Aufträge (Queue).
- Sperren (Mutex) schützen gemeinsame Daten; unveränderliche Daten (Immutability) brauchen keine.
- Python hat eine globale Interpreter-Sperre (GIL): Rechenintensive Aufgaben nutzt man dort mit Prozessen.
- Alternativen zu Threads: async/await mit Event Loop, Goroutinen (Go), Actor-Modell (Erlang, Elixir).
Siehe auch: Nebenläufigkeit, Race Condition, Mutex, async/await