Linux中:
所有的优先级范围为0-139,一共140个优先级,数值越低优先级越高;
优先级范围100-139称为静态优先级,这个范围里的进程属于非实时进程,调度方式是:SCHED_OTHER,也就是SCHED_OTHER,使用CFS算法调度(时间片)
优先级范围0-99称为动态优先级,这个范围里的进程属于实时进程,调度方式有:SCHED_FIFO和SCHED_RR(默认);
SCHED_FIFO:高优先级会抢占低优先级,高优先级运行期间,低优先级没法抢占,只能等到高优先级主动退出;对于同等优先级,先运行的进程会一直占据cpu, 只有等到先运行的进程主动退出,后续进程才能得到时间片。
SCHED_RR:高优先级会抢占低优先级,高优先级运行期间,低优先级没法抢占,只能等到高优先级主动退出;对于同等优先级的进程,各个进程会轮流运行一定的时间片(大约100ms)。
通过ps查看,大部分的普通进程的PRI=80,而不是认为的120,这是因为ps的计算方法是-40~99是整个进程优先级范围,而60~99是普通进程,-40~59是实时进程;
TOP命令显示非RT线程时,PR字段的取值是把task的prio减去100,所以看到的值是0~39
抢占概念:
由调度程序来决定什么时候停止一个程序的运行,以便其他进程能够得到执行机会,这个强制执行的挂起动作就叫抢占;
在非抢占模式下,除非进程自己主动停止运行,否则会一直执行下去;