10.4 Scheduling und Zustände von Threads
Auch bei der Thread-Programmierung ist (wie bei den Prozessen) ein Scheduler entweder in der Thread-Bibliothek oder dem Betriebssystem vorhanden, der bestimmt, wann welcher Thread Prozessorzeit erhält. Auch hier kann die Zuteilung wie schon bei den Prozessen prioritäts- und zeitgesteuert erfolgen. Bei zeitgesteuerten Threads bedeutet dies, dass jedem Thread eine bestimmte Zeit (des Prozessors oder der Prozessoren) zur Verfügung steht, ehe dieser automatisch unterbrochen wird und anschließend ein anderer Thread an der Reihe ist. Sind die Threads prioritätsgesteuert, so erhält der Thread mit der höchsten Priorität vom Scheduler den Zuschlag. Außerdem wird ein laufender Thread abgebrochen, wenn ein Thread mit einer höheren Priorität ausgeführt wird. Bitte beachten Sie außerdem, wenn Sie das rein prioritätsgesteuerte Scheduling für die Thread-Programmierung verwenden, dass ein Thread mit höchster Priorität den Prozessor für eine uneingeschränkte Zeit verwenden und somit alle anderen Threads von der Arbeit ausschließen kann.
Bei einer User-Level-Thread-Implementierung steht Ihnen nur ein prioritätsgesteuertes Scheduling zur Verfügung, da ein zeitgesteuertes die Verwendung von Systemcalls erfordert. Beide Scheduling-Arten hingegen stehen Ihnen zur Verfügung, wenn die Thread-Bibliothek im Kernel des Betriebssystems implementiert wurde.
Anhand der folgenden Abbildung können Sie die Zustände erkennen, in denen sich ein Thread befinden kann. Bei genauerer Betrachtung fällt auf, dass sich die Threads, abgesehen von den weiteren Unterzuständen, nicht wesentlich von den Prozessen unterscheiden.
|
Bereit – Der Thread wartet, bis ihm Prozessorzeit zur Verfügung steht, um seine Arbeit auszuführen. |
|
Ausgeführt – Der Thread wird im Augenblick ausgeführt – bei Multiprozessorsystemen können hierbei mehrere Threads gleichzeitig ausgeführt werden (pro CPU ein Thread). |
|
Wartet – Der Thread wird im Augenblick blockiert und wartet auf einen bestimmten Zustand (z. B. Bedingungsvariable, Mutex-Freigabe etc). |
|
Beendet – Ein Thread hat sich beendet oder wurde abgebrochen. |
|