EMZETT.
Login

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?

ProzessThread
Speichereigener, getrenntgeteilt mit anderen Threads des Prozesses
Erzeugenteuergünstig
KommunikationPipes, Sockets, Shared Memorydirekt über gemeinsame Variablen
Absturzisoliertkann 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