优先级提升

每个线程都有一个 动态优先级。 这是计划程序用于确定要执行的线程的优先级。 最初,线程的动态优先级与其基本优先级相同。 系统可以提升和降低动态优先级,以确保其响应能力强,并且没有线程因处理器时间而不足。 系统不会提升优先级介于 16 和 31 之间的基本优先级的线程优先级。 只有基优先级介于 0 和 15 之间的线程才会获得动态优先级提升。

系统提升线程的动态优先级,以增强其响应能力,如下所示。

  • 将使用NORMAL_PRIORITY_CLASS的进程带到前台时,计划程序将提升与前台窗口关联的进程的优先级类,使其大于或等于任何后台进程的优先级类。 当进程不再处于前台时,优先级类将返回到其原始设置。

  • 当窗口接收输入(如计时器消息、鼠标消息或键盘输入)时,计划程序将提升拥有窗口的线程的优先级。

  • 满足阻塞线程的等待条件时,计划程序将提升线程的优先级。 例如,当与磁盘或键盘 I/O 关联的等待作完成时,线程会收到优先级提升。

    可以通过调用 SetProcessPriorityBoostSetThreadPriorityBoost 函数来禁用优先级提升功能。 若要确定此功能是否已禁用,请调用 GetProcessPriorityBoostGetThreadPriorityBoost 函数。

提升线程的动态优先级后,计划程序每次线程完成时间切片时,都会将优先级减少一个级别,直到线程回退到其基本优先级。 线程的动态优先级永远不会小于其基本优先级。