[gesichtete Version] | [gesichtete Version] |
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 82: | Zeile 82: | ||
</p> | </p> | ||
<br /> | |||
==== Vorteile von Threads ==== | |||
<p> | |||
* Vereinfachter (und damit schneller durchführbarer) Thread-Kontextwechsel (im Vergleich zum [[Vom_Batch-Job_zum_Multitasking#Definition:_Kontextwechsel|Prozess-Kontextwechsel]]). | |||
* Alle Threads eines Prozesses haben Zugriff auf alle Betriebsmittel, welche diesem Prozess zugeordnet sind. <small>(Dies ist gleichzeitig ein Vor- und ein Nachteil!)</small> | |||
* Der Anwendungsprogrammierer kann die Funktionalität der Gesamtanwendung in unterschiedliche Threads aufteilen, welche jeder für sich einfacher zu implementieren ist. <small>(Ein Beispiel für die in der Informatik gerne verwendete [http://de.wikipedia.org/wiki/Teile_und_Herrsche Teile-und-herrsche-Strategie].)</small> | |||
</p> | |||
<br /> | |||
==== Nachteile von Threads ==== | |||
<p> | |||
* Alle Threads eines Prozesses haben Zugriff auf alle Betriebsmittel, welche diesem Prozess zugeordnet sind. <small>(Dies ist gleichzeitig ein Vor- und ein Nachteil!)</small> | |||
</p> | |||
<p> | |||
<br /> | |||
==== Aufgabe 1 ==== | |||
<loop_area type="task"> | |||
<loop_task title="Vor- und Nachteil des Betriebsmittelzugriffs"> | |||
<p> | |||
Warum ist die Zugriffsmöglichkeit auf alle Betriebsmittel eines Prozesses durch die verschiedenen Threads dieses Prozesses gleichzeitig ein Vor- und ein Nachteil? Erläutere! | |||
</p> | |||
</loop_task> | |||
</loop_area> | |||
</p> | |||
<br /> | <br /> |
Threads haben sehr viel Ähnlichkeit mit Prozessen. Zunächst die Definition:
{{#index:Thread|Leichtgewichtiger Prozess}}
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.
Man betrachte zunächst ein einfaches Beispiel für einen Prozess mit mehreren Threads:
Ein Textverarbeitungsprogramm wird gestartet. Somit existiert auf dem Computersystem ein Textverarbeitungs-Prozess. Dieser Prozess startet intern mehrere Threads, die jeweils bestimmte Aufgaben übernehmen:
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.
{{#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.
{{#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.
{{#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).
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:
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 wären, so handelt es sich offensichtlich um einen (Prozess-) Kontextwechsel.
Warum ist die Zugriffsmöglichkeit auf alle Betriebsmittel eines Prozesses durch die verschiedenen Threads dieses Prozesses gleichzeitig ein Vor- und ein Nachteil? Erläutere!
Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png