Home » Tutorials » Object Pascal/RTL » Threads

Threads

Begriffe

Bevor es an’s eigentliche Programmieren geht, ist ein wenig Theorie unerlässlich. Deshalb zunächst ein kurzer Überblick über die wichtigsten Begriffe. Wer sich mit Betriebssystem-Grundlagen auskennt, kann diesen Abschnitt getrost überspringen.
Dass Windows „multitasking-“ und „multithreadingfähig“ ist, ist fast allgemein bekannt. Häufig geht das Wissen noch so weit, dass damit gemeint ist, dass mehrere Anwendungen gleichzeitig laufen können – was unter DOS nicht möglich war.
Nun müssen wir uns die Aussage „mehrere Anwendungen laufen gleichzeitig“ jedoch aus Sicht des Betriebssystems genauer anschauen. Zunächst einmal werden laufende Programme als Prozess bezeichnet. Unter Windows 3.x sprach Microsoft noch von Tasks (deshalb auch „multitasking“ und „Taskleiste“); da besonders auf Unix-Seite jedoch immer von Prozessen die Rede war, schwenkte Microsoft mit Windows 95 auch auf diesen Begriff über.
Ein Prozess ist also eine laufende Anwendung, zu der der geladene Programmcode und Daten gehören.
Jeder Prozess besteht aus mindestens einem Thread. Darunter kann man den Pfad verstehen, an dem ein Prozess abläuft. Der „Hauptthread“, der beim Starten eines Prozesses erzeugt wird, wird auch als primärer Thread bezeichnet. Wird dieser primäre Thread beendet, ist auch der Prozess zu Ende.
Während unter dem 16-Bit-Windows (3.x) jeder Task nur aus einem Thread bestehen konnte, können 32-Bit-Anwendungen mehrere Threads gleichzeitig ausführen, um verschiedene Aktionen parallel auszuführen. Dies wird als Multithreading bezeichnet.
Mit dem „gleichzeitig“ und „parallel“ ist das natürlich so eine Sache. Die meisten Desktop-PCs besitzen lediglich einen Prozessor, der natürlich nur einen Befehl auf einmal ausführen kann. Um trotzdem den Eindruck entstehen zu lassen, mehrere Anwendungen würden gleichzeitig ablaufen, werden jedem Thread sog. Zeitscheiben zugeteilt. Dadurch erhält jeder Thread der Reihe nach eine bestimmte Zeit, in der er die CPU nutzen darf. Ist die Zeit um, wird dem Thread die Rechenleistung entzogen. Er wird in den Wartezustand versetzt, und der nächste Thread ist an der Reihe.
Nun haben Threads unterschiedliche Prioritäten. Threads mit hoher Priorität werden vom Betriebssystem bevorzugt behandelt. Beispielsweise hat der Taskmanager unter Windows die höchste Priorität, so dass man über ihn in jedem Fall Threads, die sich vermeintlich aufgehängt haben, beenden kann. Denn tritt ein Thread mit hoher Priorität auf den Plan, werden alle Threads mit niedrigerer Priorität sofort in Wartestellung versetzt. Eine normale Anwendung besitzt normale Priorität, woran ohne Grund auch nichts geändert werden sollte.
Unter Windows NT können Rechner mit mehreren Prozessoren betrieben werden. Dies ermöglicht es dann auch, dass mehrere Threads wirklich gleichzeitig abgearbeitet werden können.