Scheduling von ThreadsScheduling threads

Jedem Thread ist eine Threadpriorität zugewiesen.Every thread has a thread priority assigned to it. Threads, die innerhalb der Common Language Runtime erstellt werden, erhalten anfänglich die Priorität ThreadPriority.Normal.Threads created within the common language runtime are initially assigned the priority of ThreadPriority.Normal. Threads, die außerhalb der Runtime erstellt werden, behalten die Priorität bei, die sie vor dem Eintritt in die verwaltete Umgebung innehatten.Threads created outside the runtime retain the priority they had before they entered the managed environment. Sie können die Priorität jedes Threads mithilfe der Thread.Priority-Eigenschaft abrufen oder festlegen.You can get or set the priority of any thread with the Thread.Priority property.

Die Ausführung von Threads wird basierend auf ihrer Priorität geplant.Threads are scheduled for execution based on their priority. Auch wenn Threads innerhalb der Runtime ausgeführt werden, weist das Betriebssystem allen Threads Prozessorzeitsegmente zu.Even though threads are executing within the runtime, all threads are assigned processor time slices by the operating system. Die Details des Planungsalgorithmus, der zum Ermitteln der Ausführungsreihenfolge der Threads verwendet wird, variieren je nach Betriebssystem.The details of the scheduling algorithm used to determine the order in which threads are executed varies with each operating system. In einigen Betriebssystemen erfolgt die Planung so, dass der Thread mit der höchsten Priorität (aller ausführbaren Threads) immer zuerst ausgeführt wird.Under some operating systems, the thread with the highest priority (of those threads that can be executed) is always scheduled to run first. Wenn mehrere Threads mit der gleichen Priorität verfügbar sind, durchläuft der Planer diese Threads und weist jedem Thread ein festgelegtes Zeitsegment zu, innerhalb dessen die Ausführung erfolgt.If multiple threads with the same priority are all available, the scheduler cycles through the threads at that priority, giving each thread a fixed time slice in which to execute. Solange ein Thread mit höherer Priorität für die Ausführung verfügbar ist, werden Threads mit niedrigerer Priorität nicht ausgeführt.As long as a thread with a higher priority is available to run, lower priority threads do not get to execute. Wenn keine ausführbaren Threads mit einer bestimmten Priorität mehr verfügbar sind, fährt der Planer mit der nächstniedrigeren Priorität fort und plant die Ausführung der Threads mit dieser Priorität.When there are no more runnable threads at a given priority, the scheduler moves to the next lower priority and schedules the threads at that priority for execution. Wenn ein Thread mit einer höheren Priorität für die Ausführung verfügbar wird, erhält er Vorrang vor dem Thread mit der niedrigeren Priorität und wird erneut ausgeführt.If a higher priority thread becomes runnable, the lower priority thread is preempted and the higher priority thread is allowed to execute once again. Darüber hinaus kann das Betriebssystem Threadprioritäten auch dynamisch anpassen, wenn die Benutzeroberfläche einer Anwendung vom Vordergrund in den Hintergrund oder zurück wechselt.On top of all that, the operating system can also adjust thread priorities dynamically as an application's user interface is moved between foreground and background. Andere Betriebssysteme können einen anderen Planungsalgorithmus einsetzen.Other operating systems might choose to use a different scheduling algorithm.

Siehe auchSee also