进程和线程的优先级
优先级管理工具处理进程的优先级。
在 AIX® V 4 中,进程优先级是线程优先级的前兆。 当调用 fork() 子例程时,会创建一个进程和一个要在其中运行的线程。 线程的优先级归结于进程。
内核为每个线程维护一个优先级值(有时称为调度优先级)。 优先级值 是一个正整数且与关联线程的重要性的变化方向相反。 也就是说,较小的优先级值表示一个相对重要的线程。 当调度程序寻找线程进行分派时,它选择具有较小优先级值的可分派线程。
线程可以有固定的优先级或不固定的优先级。 优先级固定的线程的优先级值是一个常量,而优先级不固定的线程的优先级值 根据用户线程最小优先级级别(常量 40)、线程的 nice 值(缺省值是 20,可随意由 nice 或 renice 命令进行设置)和其处理器使用的损失而变化。
线程的优先级可以固定成某个值,如果用 setpri() 子例程设置(固定)它们的优先级的话,它们可以具有小于 40 的优先级值。 这些线程不会受到调度程序重算算法的影响。 如果它们的优先级值固定且小于 40,这些线程将在可以运行所有用户线程之前运行和完成。 例如,一个具有固定值 10 的线程将在具有固定值 15 的线程之前运行。
用户可以应用 nice 命令使线程的不固定优先级变低。 系统管理员可将一个负的 nice 值应用给线程,这样就给了它较好的优先级。
下图显示了一些可以更改优先级值的方法。

线程的 nice 值在创建线程时设置并且在线程的整个生命期中都是常量,除非用户通过 renice 命令或 setpri() 、setpriority()、thread_setsched() 或 nice() 系统调用明确更改了它的值。
处理器损失是一个整数,它通过线程最近的处理器使用来计算。 如果每次在一个 10 ms 的时钟滴答结束时线程受处理器控制,那么最近的处理器使用值近似加 1,直到达到最大值 120。 每个滴答的实际优先级损失随着 nice 的值增加。 所有线程的最近处理器使用值每秒重算一次。
结果如下:
- 不固定优先级的线程的优先级随着其最近处理器使用的增加而变低,反之亦然。 这暗示一般来讲,某线程最近被分配的时间片越多,那么它被分配下一个时间片的可能性越小。
- 不固定优先级的线程的优先级随着其 nice 值的增加而变低,反之亦然。
可以使用命令 ps 显示进程的优先级值、nice 值和短期的处理器使用值。
请参阅 控制微处理器争用 ,以获取有关使用 nice 和 renice 命令的更详细讨论。
请参阅 Thread-Priority-Value 计算,以获取处理器损失计算和最近处理器使用率值衰减的详细信息。
AIX 工作负载管理器 也使用优先级机制来实施处理器资源管理。 由于在 工作负载管理器 下分类的线程具有由 工作负载管理器管理的优先级,因此它们的优先级行为可能与未在 工作负载管理器下分类的线程不同。