Freigeben über


Prioritätsverstärkungen

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

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 Scheduler 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 zur ursprünglichen Einstellung zurück, wenn sich der Prozess nicht mehr im Vordergrund befindet.

  • Wenn ein Fenster Eingaben empfängt, z. B. Zeitgebermeldungen, Mausnachrichten oder Tastatureingaben, erhöht der Zeitplan die Priorität des Threads, der das Fenster besitzt.

  • Wenn die Wartezeitbedingungen für einen blockierten Thread erfüllt sind, erhöht der Scheduler die Priorität des Threads. Wenn beispielsweise ein Mit Datenträger oder Tastatur-E/A verknüpfter Wartevorgang abgeschlossen ist, erhält der Thread eine Prioritätsverstärkung.

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

Nach dem Auslösen der dynamischen Priorität eines Threads reduziert der Scheduler diese Priorität jedes Mal um eine Ebene, wenn der Thread ein Zeitsegment abgeschlossen hat, bis der Thread wieder auf seine Basispriorität zurückgesetzt wird. Die dynamische Priorität eines Threads ist nie kleiner als seine Basispriorität.