5.4 KiB
5.4 KiB
Threads
-
Kleinste ausführbare Einheit innerhalb eines Prozesses
-
ermöglichen flexiblere, reaktionsschnellere und effizientere Programmierung
-
müssen sorgfältig überwacht werden, um Probleme zu vermeiden
- bspw. Deadlocks oder Rennbedingungen
Threads vs Prozesse
Merkmal | Thread | Prozess |
---|---|---|
Definition | Kleinste ausführbare Einheit innerhalb eines Prozesses | Unabhängiges Programm in Ausführung |
Ressourcenzuweisung | Teilen denselben Adressraum & Ressourcen innerhalb eines Prozesses | Haben eigenen Adressraum und separate Ressourcen |
Kommunikation | direkter Zugriff auf gemeinsame Daten erfordert synchronisierte Mechanismen |
erfordert aufwändige Mechanismen wie IPC |
Synchronisation | benötigt Synchronisationsmechanismen um Rennbedingungen zu vermeiden | Isoliert voneinander, weniger Rennbedingungen, aber schwerere Synchronisation zwischen Prozessen |
Overhead | geringerer Overhead | höherer Overhead, da separate Adressräume und Ressourcen |
Ressourcennutzung | effiziente Nutzung innerhalb desselben Prozesses | höherer Ressourcenverbrauch aufgrund separater Adressräume |
Erstellung und Terminierung | schnellere Erstellung und Terminierung Terminierung beeinflusst nur den spezifischen Thread |
Langsamere Erstellung und Terminierung Beenden eines Prozesses beendet alle seine Threads |
Fehlerisolierung | Scheitern eines Threads kann gesamten Prozess beeinträchtigen | Isoliert, Scheitern beeinflusst keine anderen Prozesse |
- Thread wird auch als Aktivitätsträger oder leichtgewichtiger Prozess benannt
- ist immer Teil eines Prozesses
- Prozess kan viele Threads gleichzeitig enthalten
- werden unabhängig voneinander (ähnlich Prozesse) abgearbeitet
- Prozess besteht bei Erzeugung aus einem Thread
- wird impliziert mit dem Prozess erzeugt
- Prozess kan viele Threads gleichzeitig enthalten
- ist immer Teil eines Prozesses
Thread | Prozess |
---|---|
Leichter Prozess | Programm in Ausführung |
Gehört zu Prozess | Vollständig isoliert |
gemeinsamer Speicher | eigener Speicher |
geringer Ressourcenverbrauch | hoher Ressourcenverbrauch |
niedriger Zeitbedarf bei Kontextwechsel | hoher Zeitbedarf bei Kontextwechsel |
Abarbeitung von Threads ist ca. 10-100 mal schneller im Vergleich zur Verarbeitung
von Prozessen.Threads nutzen den gleichen Adressraum, was die Kommunikation erleichtert
Erzeugung von neuen Threads
- Sehr einfach
- Code eines Threads ist eine normal definierte Funktion, die wieder andere Funktionen aufrufen kann
- werden von Systemaufrufen gestartet
- Systemaufruf bekommt die Threadfunktion als Parameter übergeben
Threads implementieren
- Threads sind i.d.R. im Kern implementiert, ähnlich wie Prozesse
- Threads haben dieselben Zustände wie Prozesse, Bedeutung der Zustände ist identisch
- Kann in vielen Programmiersprachen und Systemen realisiert werden
- bspw. C, C++, C#, Java, Python, Swift, ...
Befehle mit POSIX API
- pthread_create - Erzeugen eines Threads
- pthread_exit - Beenden eines Threads
- pthread_join - Warten auf Ende eines Threads
- pthread_yield - Aufgaben der CPU
Fork-Join-Modell
- Paradigma für die parallele Programmierung
- Erstellen von Threads (fork) und Zusammenführen von Threads (join)
- wird gerne in rekursiven Algorithmen verwendet
- große Aufgabe kann in kleinere Teilaufgaben zerlegt werden
- Jeder Thread kann sich auf eine Teilaufgabe konzentrieren
- Ergebnisse werden die Ergebnisse kombiniert
FORK
Durch den Aufruf der Funktion fork() in einem Programm werden Threads ebenso wie der
gesamte Adressraum des Prozesses kopiertEs entsteht eine exakte Kopie des aufrufenden Prozesses, einschließlich aller Threads und deren Zustände