【Linux学习笔记44】线程的调度策略与优先级

本文深入探讨了Linux系统中线程优先级的概念,包括静态优先级与动态优先级的运作机制,以及调度策略如FIFO和RR的具体应用。同时,介绍了如何通过调整Nice值来优化CPU和I/O密集型任务的响应速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值