linux线程调度策略简述

本文简述了Linux系统中线程调度的三种策略:SCHED_FIFO、SCHED_RR和SCHED_OTHER。SCHED_FIFO和SCHED_RR属于实时线程策略,具有静态优先级,不同之处在于SCHED_RR有时间片限制。SCHED_OTHER是默认策略,线程按动态优先级(nice值)调度。实时线程的静态优先级可通过API进行设置。
摘要由CSDN通过智能技术生成

简述

linux系统调度执行的最小单位是线程,线程的调度策略有以下三种:

(1)SCHED_FIFO
其静态优先级必须设置为1~99,这将意味着一旦线程处于就绪态,他就能立即抢占任何静态优先级为0的普通线程。采样SCHED_FIFO调度策略的线程还遵循以下原则:

  • 当他处于就绪态时,就会被放入其所在优先级队列的队尾位置
  • 当被更高优先级的线程抢占后,他会被放入其所在优先级队列的队头位置,当所有优先级比他高的线程不再运行后,他就恢复运行
  • 当它调用sched_yield()后,他会被放入其所在优先级队列的队尾位置

总的来说,一个具有SCHED_FIFO调度策略的线程会一直运行直到发送I/O请求,或被更高优先级线程抢占,或调用sched_yield()主动让出cpu

(2)SCHED_RR
这种策略的情况与SCHED_FIFO类似,区别是:每一个SCHED_RR策略下的线程都会被分配一个时间片,当时间片耗光时,它会被放入其所在优先级队列的队尾位置。
可以用sched_rr_get_interval()来获取时间片的具体数值。

(3)SCHED_OTHER
其静态优先级必须设置为0,该策略是linux系统调度的默认策略,处于0优先级的这些线程按照所谓的动态优先级(nice值)被调度,且每当一个线程已处于就绪态但被调度器调度无视的时候,其动态优先级会自动增加一个单位,这样能保证这些线程竞争cpu的公平性。
如何设置线程的静态优先级和动态优先级,相关的API如下:

</

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值