Linux中如何体现优先级
- 静态优先级:
级别为0~99的100个优先级:0级为普通,1 ~ 99级为实时线程 - 动态优先级:
当静态优先级为0时,就以动态优先级加以区分,级别为==-19~20(nice值)==,Nice值越大,优先级越低
例如:
两个都为0级的静态优先级线程:p1,p2
p1的nice为20,p2的nice为-10。
则,p2比p1优先级更高。
动态优先级的用途例子2:
- 如果进程或者线程是CPU消耗型的,系统会通过提高Nice值来降低该进程的动态优先级,使其响应速度变慢。例如:音视频解码
- 如果进程或者线程是IO消耗型的,系统会通过降低Nice值来提高该进程的动态优先级,使其响应速度变快。例如:编辑器的使用(记事本,world)
调度策略:
静态优先级中:
- 1~99级:FIFO/RR
- 0级:其它
- 上图是1~99级中的调度策略
- 假如在第5级中,FIFO先占用CPU运行,会一直占用着CPU,直到运行结束或者IO操作介入,睡眠等出现,FIFO才会放弃占用CPU
- RR会运行一段时间后,放弃占用CPU重新排队等待。
- 直到第5级运行结束,才到第4级的进程或者线程运行。
代码实现
设置线程是否继承创建者的调度策略
int pthread_attr_setinheritsched()
系统的默认优先级为:普通优先级0级,Nice=0设置线程调度策略int pthread_attr_setschedpolicy()
设置线程静态和动态优先级:
int pthread_attr_setschedparam()
代码运行结果:
A与B交错出现如果将线程更改为RR,并且更改优先级:
在普通用户状态下运行:
在管理员root状态下运行:
是因为在非管理员情况下,只能执行普通线程。
只有管理员才可以,正常启动实时线程。
Nice值的使用:
int nice(int inc)