3.2.9 Threads

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 57: Zeile 57:
Wird die Java-Laufzeitumgebung auf einem Betriebssystem installiert, welches bereits Threads unterstützt, so können Threads sowohl auf Kernel-Ebene (also vom Betriebssystem) verwaltet werden, als auch auf User-Ebene (also von der JRE).
Wird die Java-Laufzeitumgebung auf einem Betriebssystem installiert, welches bereits Threads unterstützt, so können Threads sowohl auf Kernel-Ebene (also vom Betriebssystem) verwaltet werden, als auch auf User-Ebene (also von der JRE).
</p>
</p>
<br />
==== Vor- und Nachteile von Threads ====
<p>
Es sei nochmals verwiesen auf die Ausführungen im Kapitel [[Nur ein Prozessor mit einem Kern]]. Damit wurde bereits deutlich, dass immer nur ein Prozess zur Zeit auf der CPU ausgeführt werden kann. Besteht dieser Prozess nun aus mehreren Threads, so ist klar, dass davon nur ein einziger Thread aktiv auf der CPU ausgeführt werden kann. Die Threads eines Prozesses müssen sich auf der CPU also ebenso abwechseln, wie die verschiedenen Prozesse.
</p>
<p>
{{#index:Kontextwechsel|CPU, Kontextwechsel|Thread-Kontextwechsel|Kontextwechsel, Thread}}
In Bezug auf Prozesse wurde bereits der Begriff [[Vom_Batch-Job_zum_Multitasking#Definition:_Kontextwechsel|Kontextwechsel]] erläutert. Analog lässt sich der Begriff Thread-Kontextwechsel definieren:
</p>
<p>
<br />
==== Definition: Thread-Kontextwechsel ====
<loop_area type="definition">
<p>
Unter einem '''Thread-Kontextwechsel''' auf der CPU versteht man alle erforderlichen Tätigkeiten, um einen gerade auf der CPU aktiven Thread A, durch einen anderen Thread B zu ersetzen.
</p>
</loop_area>
</p>
<p>
Dabei kann stillschweigend davon ausgegangen werden, dass beide Threads demselben Prozess zugeordnet sind, denn falls die Threads A und B unterschiedlichen Prozessen zugeordnet sind, so handelt es sich um einen [[Vom_Batch-Job_zum_Multitasking#Definition:_Kontextwechsel|(Prozess-) Kontextwechsel]].
</p>


<br />
<br />

Version vom 26. Oktober 2013, 16:30 Uhr

Threads haben sehr viel Ähnlichkeit mit Prozessen. Zunächst die Definition:


Definition: Thread (Leichtgewichtiger Prozess)

{{#index:Thread|Leichtgewichtiger Prozess}}

Definition

Unter einem Thread oder Leichtgewichtigen Prozess versteht man einen Teil eines Prozesses, der einen unabhängigen Kontrollfluss repräsentiert.

Ein Prozess kann aus mehreren Threads bestehen, somit ergeben sich mehrere voneinander unabhängige, nebenläufige Kontrollflüsse. Vereinfachend kann man sich vorstellen, dass ein Thread so etwas wie "ein Prozess in einem Prozess" ist. Bei mehreren Threads innerhalb eines Prozesses hat man somit "mehrere Prozesse innerhalb eines Prozesses". Jedoch gibt es unterschiedliche Verfahrensweisen bei der Nutzung von Betriebsmitteln, was weiter unten auf dieser Seite noch erläutert wird.


Beispiel

Man betrachte zunächst ein einfaches Beispiel für einen Prozess mit mehreren Threads:

Beispiel

Ein Textverarbeitungsprogramm wird gestartet. Somit existiert auf dem Computersystem ein Textverarbeitungs-Prozess. Dieser Prozess startet intern mehrere Threads, die jeweils bestimmte Aufgaben übernehmen:

  • Thread 1:
    realisiert den Texteditor. Er reagiert also auf Eingaben des Users mit Tastatur oder Maus.
  • Thread 2:
    realisiert eine "Alle 10 Minuten automatisch im Hintergrund speichern"-Funktion. D.h. dieser Thread wartet 10 Minuten, speichert dann den aktuellen Inhalt des Texteditors in einer (temporären) Datei auf der Festplatte, wartet wieder 10 Minuten, speichert wieder... usw.
  • Thread 3:
    realisiert die automatische Rechtschreibprüfung. D.h. in kleinen zeitlichen Abständen werden eingegebene Wörter geprüft und ggf. rot unterstrichen.

Das Thread-Konzept wird heute von den meisten relevanten Betriebssystemen unterstützt. Threads können deshalb auf Kernel-Ebene realisiert sein. Falls das Betriebssystem keine Threads unterstützt, so können Threads immer noch auf User-Ebene realisiert werden. Denkbar sind auch Mischformen: Das Betriebssystem unterstützt Threads auf Kernel-Ebene und zusätzlich ist das Thread-Konzept noch auf User-Ebene implementiert.


Threads auf Kernel-Ebene

{{#index:Threadkontrollblock|Thread Control Block|TCB|Thread, Kernel-Ebene}} Unterstützt das Betriebssystem Threads, so kann auch das Betriebssystem deren Verwaltung übernehmen. Dies geschieht sehr ähnlich zur Verwaltung von Prozessen, beispielsweise existiert i.d.R. ein Threadkontrollblock (Thread Control Block, TCB), analog zum Prozesskontrollblock.


Threads auf User-Ebene

{{#index:Threadbibliothek|Thread, User-Ebene|Java-Laufzeitumgebung|Java Runtime Environment|JRE}} Unterstützt das Betriebssystem keine Threads, so kann auf der User-Ebene ein spezielles Programm (Mandl 2013 nennt dies in Kapitel 4.2.2 die Threadbibliothek) deren Bereitstellung übernehmen. Ein Beispiel dafür ist die Java-Laufzeitumgebung (Java Runtime Environment, kurz JRE), welche eine eigene Threadverwaltung implementiert, und somit auch Threads auf Nicht-Thread-unterstützenden Betriebssystemen ermöglicht.


Beispiel einer Mischform

{{#index:Thread, Mischform}} Wird die Java-Laufzeitumgebung auf einem Betriebssystem installiert, welches bereits Threads unterstützt, so können Threads sowohl auf Kernel-Ebene (also vom Betriebssystem) verwaltet werden, als auch auf User-Ebene (also von der JRE).


Vor- und Nachteile von Threads

Es sei nochmals verwiesen auf die Ausführungen im Kapitel Nur ein Prozessor mit einem Kern. Damit wurde bereits deutlich, dass immer nur ein Prozess zur Zeit auf der CPU ausgeführt werden kann. Besteht dieser Prozess nun aus mehreren Threads, so ist klar, dass davon nur ein einziger Thread aktiv auf der CPU ausgeführt werden kann. Die Threads eines Prozesses müssen sich auf der CPU also ebenso abwechseln, wie die verschiedenen Prozesse.

{{#index:Kontextwechsel|CPU, Kontextwechsel|Thread-Kontextwechsel|Kontextwechsel, Thread}} In Bezug auf Prozesse wurde bereits der Begriff Kontextwechsel erläutert. Analog lässt sich der Begriff Thread-Kontextwechsel definieren:


Definition: Thread-Kontextwechsel

Definition

Unter einem Thread-Kontextwechsel auf der CPU versteht man alle erforderlichen Tätigkeiten, um einen gerade auf der CPU aktiven Thread A, durch einen anderen Thread B zu ersetzen.

Dabei kann stillschweigend davon ausgegangen werden, dass beide Threads demselben Prozess zugeordnet sind, denn falls die Threads A und B unterschiedlichen Prozessen zugeordnet sind, so handelt es sich um einen (Prozess-) Kontextwechsel.





Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png