Linux-线程调度与优先级

Linux内核的三种调度策略:
  1,SCHED_OTHER 分时调度策略,
  2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃
  3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。

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)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值