优先级提升

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

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

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

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

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

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

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