Share via


優先度ブースト

各スレッドには 動的な優先度があります。 これは、スケジューラが実行するスレッドを決定するために使用する優先順位です。 最初は、スレッドの動的優先度は基本優先度と同じです。 システムは動的優先度を高めて低くして、応答性が高く、プロセッサ時間にスレッドが枯渇しないようにすることができます。 システムは、基本優先度レベルが 16 から 31 のスレッドの優先順位を上げません。 基本優先度が 0 ~ 15 のスレッドのみが動的優先度ブーストを受け取ります。

システムは、スレッドの動的優先度を高め、次のように応答性を高めます。

  • NORMAL_PRIORITY_CLASSを使用するプロセスがフォアグラウンドに取り込まれると、スケジューラはフォアグラウンド ウィンドウに関連付けられているプロセスの優先度クラスを昇格させ、バックグラウンド プロセスの優先度クラス以上になるようにします。 プロセスがフォアグラウンドでなくなった場合、優先度クラスは元の設定に戻ります。

  • タイマー メッセージ、マウス メッセージ、キーボード入力などの入力をウィンドウが受け取ると、スケジューラはウィンドウを所有するスレッドの優先度を高めます。

  • ブロックされたスレッドの待機条件が満たされると、スケジューラによってスレッドの優先度が向上します。 たとえば、ディスクまたはキーボードの I/O に関連付けられている待機操作が完了すると、スレッドは優先度ブーストを受け取ります。

    優先度ブースト機能を無効にするには、 SetProcessPriorityBoost または SetThreadPriorityBoost 関数を呼び出します。 この機能が無効になっているかどうかを確認するには、 GetProcessPriorityBoost または GetThreadPriorityBoost 関数を呼び出します。

スレッドの動的優先度を上げた後、スケジューラは、スレッドがタイム スライスを完了するたびに、スレッドが基本優先度に戻るまで、その優先度を 1 レベル下げます。 スレッドの動的優先度が、基本優先度より小さいことはありません。