updatet
This commit is contained in:
parent
98dd74ca9d
commit
776a6ec0f9
BIN
Writerside/images/image_157.png
Normal file
BIN
Writerside/images/image_157.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 206 KiB |
@ -12,6 +12,7 @@
|
|||||||
<toc-element topic="05_prozesszustaende.md"/>
|
<toc-element topic="05_prozesszustaende.md"/>
|
||||||
<toc-element topic="06_prozessstruktur.md"/>
|
<toc-element topic="06_prozessstruktur.md"/>
|
||||||
<toc-element topic="07_Prozesssynchronisation.md"/>
|
<toc-element topic="07_Prozesssynchronisation.md"/>
|
||||||
|
<toc-element topic="08_Threads.md"/>
|
||||||
</toc-element>
|
</toc-element>
|
||||||
<toc-element toc-title="OOAD">
|
<toc-element toc-title="OOAD">
|
||||||
<toc-element topic="IntroductionOOAD.md"/>
|
<toc-element topic="IntroductionOOAD.md"/>
|
||||||
@ -37,5 +38,4 @@
|
|||||||
</toc-element>
|
</toc-element>
|
||||||
</toc-element>
|
</toc-element>
|
||||||
</toc-element>
|
</toc-element>
|
||||||
|
|
||||||
</instance-profile>
|
</instance-profile>
|
73
Writerside/topics/BS/08_Threads.md
Normal file
73
Writerside/topics/BS/08_Threads.md
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# 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](07_Prozesssynchronisation.md#deadlock) 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<br/>erfordert synchronisierte Mechanismen | erfordert aufwändige Mechanismen wie IPC |
|
||||||
|
| [Synchronisation](07_Prozesssynchronisation.md) | benötigt Synchronisationsmechanismen um Rennbedingungen zu vermeiden | Isoliert voneinander, weniger Rennbedingungen,<br/>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**<br/>Terminierung beeinflusst nur den spezifischen Thread | Langsamere Erstellung und Terminierung<br/>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
|
||||||
|
|
||||||
|
| **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](06_prozessstruktur.md#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 kopiert
|
||||||
|
>
|
||||||
|
> Es entsteht eine exakte Kopie des aufrufenden Prozesses, einschließlich aller Threads und deren Zustände
|
@ -1,4 +1,4 @@
|
|||||||
# MU2 und MU3Rechner
|
# MU2/3-Rechner
|
||||||
## MU2 Rechner
|
## MU2 Rechner
|
||||||
## Adressraum vergrößern
|
## Adressraum vergrößern
|
||||||
### Wortbreite vergrößern
|
### Wortbreite vergrößern
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# MU4 und MU5 Rechner
|
# MU4/5-Rechner
|
||||||
## Registeranzahl erhöhen
|
## Registeranzahl erhöhen
|
||||||
### Registerarchitektur
|
### Registerarchitektur
|
||||||
- Gesamtzahl der Register ist normalerweise eine Zweierpotenz
|
- Gesamtzahl der Register ist normalerweise eine Zweierpotenz
|
||||||
|
Loading…
x
Reference in New Issue
Block a user