Threads
Threads
Ein Thread ist eine leichtgewichtige, aktive Untereinheit eines Prozesses — eine „virtuelle CPU". Threads eines Prozesses teilen sich Code, Daten und Dateien, haben aber eigenen Stack und eigene Register.
Motivation
Manchmal ist das volle Prozesskonzept zu aufwendig — etwa wenn ein Programm aus mehreren eigenständigen Abläufen besteht. Als leichtgewichtige Ergänzung bieten viele OS daher Threads auf Programmierebene.
Ein Thread ist ein thread of execution in der Prozessumgebung. Threads eines Prozesses unterscheiden sich durch ihren Zustand: state-Variable, Kontrollblock und vor allem den Stack.
Geteilt vs. privat
Klicke die Elemente an, um zu sehen, was Threads teilen und was privat ist:
Vor- & Nachteile
Vorteile (+)
- Effizienzvorteile; erlauben Parallelisierung eines Programmablaufs
- Kommunikation zwischen Threads desselben Prozesses ist einfacher und schneller als zwischen Prozessen (gemeinsamer Speicher)
- werden von manchen OS schneller verarbeitet (günstiger Kontextwechsel)
Nachteile (−)
- in der Programmierung kritischer: viele gemeinsame Ressourcen → Race Conditions
- schlechtere Separierbarkeit der Anwendung
- beim Absturz eines Threads bricht meist der gesamte Prozess ab
Operationen & APIs
Ähnlich wie bei Prozessen: Starten/Stoppen, Attribute setzen (z.B. Priorität), Zustand ändern (sleep). Eine Besonderheit sind die Operationen zur Synchronisation (oft Teil der Thread-Bibliothek selbst → Kapitel 3).
- Linux: POSIX Threads (
pthreads) - Windows: Win32/Win64-API
Programme aus zwei oder mehr Threads heißen multi-threaded oder nebenläufig. Genau hier wird Synchronisation unverzichtbar.
Verwandte Notes
Prozess · Prozesskontext & Kontextwechsel · Race Conditions · Semaphoren · Scheduling-Grundlagen
← Kapitelübersicht ����