计划优先次序

【勇芳软件工作室】汉化HomePreviousNext

每个线程被分配一个调度优先级。优先级范围从零(最低优先级)到31(最高优先级)。只有零页线程的优先级可以为零。零页线程是一个系统线程。

每个线程的优先级由以下标准决定:

*其进程的优先级

*进程优先级别内的线程的优先级

优先级和优先级被组合形成线程的【基本优先】.

优先课

每个进程都属于以下优先级之一:

IDLE_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS

默认情况下,进程的优先级为NORMAL_PRIORITY_CLASS。使用CreateProcess函数来指定子进程创建时的优先级。使用SetPriorityClass更改进程的优先级,并GetPriorityClass来确定进程的当前优先级。

监视系统的进程,例如屏幕保护程序或定期更新显示的应用程序,应使用IDLE_PRIORITY_CLASS。这样可以防止不具有高优先级的进程的线程干扰较高优先级的线程。

小心使用HIGH_PRIORITY_CLASS。如果线程在较长时间内以最高优先级级别运行,系统中的其他线程将无法获得处理器时间。如果同时将多个线程设置为高优先级,线程将失去其有效性。高优先级类应该保留给必须响应时间关键事件的线程。如果您的应用程序执行一个需要高优先级的任务,而其余任务是正常优先级,请使用SetPriorityClass临时提升应用程序的优先级;然后在时间关键任务完成后减少它。另一种策略是创建一个高优先级进程,其所有线程的大部分时间都被阻塞,只有在需要关键任务时唤醒线程。重要的一点是,高优先级线程应该执行一段短暂的时间,并且只有在执行时间紧迫的工作时。

您几乎不应该使用REALTIME_PRIORITY_CLASS,因为这会中断管理鼠标输入,键盘输入和后台磁盘刷新的系统线程。这个类可以适用于直接与硬件通话的应用程序,或者执行应该有限制中断的简短任务的应用程序。

优先级

以下是每个优先级中的优先级

THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_TIME_CRITICAL

所有线程都使用THREAD_PRIORITY_NORMAL创建。这意味着线程优先级与进程优先级相同。创建线程后,使用SetThreadPriority函数调整其相对于进程中其他线程的优先级。

一个典型的策略是为进程的输入线程使用THREAD_PRIORITY_ABOVE_NORMAL或THREAD_PRIORITY_HIGHEST,以确保应用程序响应用户。后台线程,特别是处理器密集的线程,可以设置为THREAD_PRIORITY_BELOW_NORMAL或THREAD_PRIORITY_LOWEST,以确保在必要时可以抢占它们。但是,如果您有一个线程等待另一个优先级较低的线程来完成某些任务,请确保阻止等待的高优先级线程的执行。为此,请使用等待功能关键部分睡觉功能SleepExSwitchToThread功能。这比线程执行一个循环更为方便。否则,进程可能会死锁,因为优先级较低的线程从未安排。

要确定线程的当前优先级,请使用GetThreadPriority功能。

基本优先

线程的优先级由进程的优先等级及其优先级决定。优先级和优先级被组合形成每个线程的【基本优先】.

下表显示了优先级和优先级值组合的基本优先级。

 流程优先级线程优先级
1IDLE_PRIORITY_CLASS,NORMAL_PRIORITY_CLASS或HIGH_PRIORITY_CLASSTHREAD_PRIORITY_IDLE
2IDLE_PRIORITY_CLASSTHREAD_PRIORITY_LOWEST
3IDLE_PRIORITY_CLASSTHREAD_PRIORITY_BELOW_NORMAL
4IDLE_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
5背景NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_LOWEST
 IDLE_PRIORITY_CLASSTHREAD_PRIORITY_ABOVE_NORMAL
6背景NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_BELOW_NORMAL
 IDLE_PRIORITY_CLASSTHREAD_PRIORITY_HIGHEST
7前台NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_LOWEST
 背景NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
8前台NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_BELOW_NORMAL
 NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_ABOVE_NORMAL
9前台NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
 NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_HIGHEST
10前台NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_ABOVE_NORMAL
11HIGH_PRIORITY_CLASSTHREAD_PRIORITY_LOWEST
 前台NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_HIGHEST
12HIGH_PRIORITY_CLASSTHREAD_PRIORITY_BELOW_NORMAL
13HIGH_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
14HIGH_PRIORITY_CLASSTHREAD_PRIORITY_ABOVE_NORMAL
15IDLE_PRIORITY_CLASS,NORMAL_PRIORITY_CLASS或HIGH_PRIORITY_CLASSTHREAD_PRIORITY_TIME_CRITICAL
 HIGH_PRIORITY_CLASSTHREAD_PRIORITY_HIGHEST
16REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_IDLE
22REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_LOWEST
23REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_BELOW_NORMAL
24REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
25REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_ABOVE_NORMAL
26REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_HIGHEST
31REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_TIME_CRITICAL