Prozess vs. Thread: Unterschiede erklärt

Ein Prozess ist ein laufendes Programm mit eigenem privatem Adressraum und eigenen Ressourcen. Ein Thread ist eine Ausführungseinheit innerhalb eines Prozesses. Alle Threads eines Prozesses teilen sich dessen Speicher, was sie günstig zu erzeugen und schnell in der Kommunikation macht, aber auch bedeutet, dass ein einziger Fehler oder Absturz den gesamten Prozess beeinträchtigen kann. Getrennte Prozesse sind voneinander isoliert, was sicherer ist, aber bei der Erzeugung und der Kommunikation über Prozessgrenzen hinweg mehr kostet.

AspektProzessThread
Was es istEin laufendes Programm mit eigenem Adressraum, eigenen Dateien und weiteren RessourcenEin Ausführungspfad innerhalb eines Prozesses, mit eigenem Stack und eigenen Registern
SpeicherEigener virtueller Adressraum, von anderen Prozessen isoliertTeilt Code, Heap und globale Daten seines Prozesses; nur der Stack ist privat
ErzeugungskostenAufwendiger: Ein neuer Adressraum muss eingerichtet werden (Copy-on-Write verringert die Kosten)Leichter: kein neuer Adressraum
KontextwechselTeurer: Der Adressraum wechselt, und zwischengespeicherte Übersetzungen (TLB) können verloren gehenGünstiger: Adressraum und Caches bleiben gleich
KommunikationBenötigt Interprozesskommunikation wie Pipes, Sockets oder Shared MemoryLiest und schreibt direkt im gemeinsamen Speicher, was schnell ist
Isolation und FehlerEin Absturz bleibt meist auf den Prozess beschränktEin Absturz in einem Thread kann den gesamten Prozess zu Fall bringen
SynchronisationNötig, wenn Prozesse Speicher oder Dateien teilenBei gemeinsamen Daten immer nötig: Mutexe und atomare Operationen, sonst drohen Data Races und Deadlocks
SchedulingEnthält einen oder mehrere ThreadsDie Einheit, die das Betriebssystem tatsächlich auf CPU-Kerne einplant
Typische EinsatzgebieteIsolation und Sicherheit: Browser-Tabs, Dienste, Shell-PipelinesParallele Arbeit innerhalb eines Programms: Server mit vielen Verbindungen, Hintergrundaufgaben, parallele Berechnungen

Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welches einsetzen

Prozess
Wenn Sie Isolation, Robustheit oder Sicherheit wünschen oder wenn Softwareteile von verschiedenen Parteien stammen und keinen Speicher teilen sollen.
Thread
Wenn Aufgaben schnell Daten austauschen müssen und Sie mehrere CPU-Kerne innerhalb eines Programms nutzen wollen.
Vorsicht geboten
Der gemeinsame Speicher ist zugleich Stärke und Gefahr der Threads. Schützen Sie gemeinsame Daten mit Sperren oder atomaren Operationen und achten Sie auf Deadlocks.

FAQ

Teilen sich Threads den Speicher?

Ja. Threads eines Prozesses teilen sich dessen Code, Heap und globale Daten. Jeder Thread hat seinen eigenen Stack und seine eigenen Register.

Warum sind Threads günstiger zu erzeugen als Prozesse?

Ein neuer Prozess braucht einen eigenen Adressraum, während ein Thread den seines Prozesses wiederverwendet. Auch der Wechsel zwischen Threads vermeidet einen Wechsel des Adressraums und kostet daher weniger.

Was passiert, wenn ein Thread abstürzt?

Er kann den gesamten Prozess zu Fall bringen, da die Threads sich den Speicher teilen. Ein Absturz in einem Prozess beeinträchtigt andere Prozesse in der Regel nicht.

Wann sollte ich Prozesse statt Threads verwenden?

Wenn Sie Isolation und Robustheit wünschen, etwa bei Browser-Tabs oder unabhängigen Diensten, oder wenn verschiedene Teile den Speicher der anderen Teile nicht beschädigen können sollen.

Wichtige Begriffe erklärt

Kontextwechsel (Context Switch)
Wechsel des auf einer CPU laufenden Prozesses oder Threads. Register, Befehlszähler und weiterer Zustand werden gesichert und wiederhergestellt; beim Prozesswechsel wird auch der Adressraum gewechselt.
Mutex (gegenseitiger Ausschluss)
Eine Sperre, die nur ein Thread gleichzeitig halten kann. Typischerweise schläft ein Thread, der sie nicht bekommt, und gibt die CPU ab; das Betriebssystem weckt ihn, wenn die Sperre freigegeben wird.
Verklemmung (Deadlock)
Ein Zustand, in dem Threads jeweils eine Ressource halten und auf eine von einem anderen gehaltene warten, so dass keiner weiterkommt. Eine feste globale Sperrreihenfolge verhindert ihn.

Weitere Vergleiche