优先级提升

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

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

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

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

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

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

在提高线程的动态优先级后,计划程序在每次线程完成一个时间片时,会将该优先级降低一级,直到线程回退到其基本优先级。 线程的动态优先级始终不低于其基本优先级。