Prioritätsschub

Jeder Thread hat eine dynamische Priorität. Dies ist die Priorität, die der Planer verwendet, um zu bestimmen, welcher Thread ausgeführt werden soll. Zunächst ist die dynamische Priorität eines Threads identisch mit der Basispriorität. Das System kann die dynamische Priorität erhöhen und senken, um sicherzustellen, dass es reaktionsfähig ist und keine Threads für die Prozessorzeit verhungern. Das System erhöht die Priorität von Threads mit einer Basisprioritätsebene zwischen 16 und 31 nicht. Nur Threads mit einer Basispriorität zwischen 0 und 15 erhalten dynamische Prioritätserhöhungen.

Das System erhöht die dynamische Priorität eines Threads, um seine Reaktionsfähigkeit wie folgt zu verbessern.

  • Wenn ein Prozess, der NORMAL_PRIORITY_CLASS verwendet, in den Vordergrund gebracht wird, erhöht der Planer die Prioritätsklasse des Prozesses, der dem Vordergrundfenster zugeordnet ist, sodass er größer oder gleich der Prioritätsklasse aller Hintergrundprozesse ist. Die Prioritätsklasse kehrt zu ihrer ursprünglichen Einstellung zurück, wenn sich der Prozess nicht mehr im Vordergrund befindet.

  • Wenn ein Fenster Eingaben empfängt, z. B. Timernachrichten, Mausnachrichten oder Tastatureingaben, erhöht der Planer die Priorität des Threads, dem das Fenster gehört.

  • Wenn die Wartebedingungen für einen blockierten Thread erfüllt sind, erhöht der Planer die Priorität des Threads. Wenn beispielsweise ein Wartevorgang für Datenträger- oder Tastatur-E/A-Vorgänge abgeschlossen ist, erhält der Thread eine Prioritätserhöhung.

    Sie können das Feature zur Prioritätssteigerung deaktivieren, indem Sie die Funktion SetProcessPriorityBoost oder SetThreadPriorityBoost aufrufen. Um festzustellen, ob dieses Feature deaktiviert wurde, rufen Sie die Funktion GetProcessPriorityBoost oder GetThreadPriorityBoost auf.

Nach dem Erhöhen der dynamischen Priorität eines Threads reduziert der Planer diese Priorität jedes Mal um eine Ebene, wenn der Thread einen Zeitslice abgeschlossen hat, bis der Thread wieder auf seine Basispriorität zurückfällt. Die dynamische Priorität eines Threads ist nie niedriger als seine Basispriorität.