linux内核原理--调度

1.普通线程调度-完全公平调度
这里对完全公平调度关键部分进行简要描述.
对可调度的每个线程,按其虚拟运行时间作为键值放置在一个红黑树结构上.

对每个线程,初始时给其提供一个调度间隔.
每当先可运行线程集合添加或移除线程时,内核会计算并设置一个整体调度间隔.
集合中的线程依据其权重占整体权重的比例,结合整体调度间隔计算得到该线程的调度间隔.

在定时中断处理中,会更新当前运行线程的实际运行时间,虚拟运行时间.
虚拟运行时间变化量依据实际运行时间变化量,线程权重进行计算.原则是越优先的线程同样的实际运行时间计算出来的虚拟运行时间越小.

定时中断处理中,检测若当前线程的连续实际运行时间已经达到其调度间隔时,会触发一次重新调度处理.每次重新调度处理中,从红黑树中选出虚拟运行时间最小的一个线程,让其替换当前进程投入运行.

重新调度处理中,会选出红黑树中虚拟运行时间最小的线程,让其抢占当前线程,投入运行.
完全公平调度下,可通过nice系统调用调整进程静态优先级.
优先级越高的进程倾向于拥有更高的调度间隔,更低的虚拟运行时间增加速度.

2.实时线程调度-时间片轮转,FIFO
(1). 时间片轮转
a. 每个线程分配一个时间片,当前运行线程时间片用完后,插入所在优先级队列尾部,选择优先级队列首部线程投入运行.
b. 当更高优先级队列插入线程时,设置当前线程调度标志,以便其在尽快进行调度检测.从而选择更高优先级队列中线程投入运行.

(2). FIFO
a. 线程投入运行后,持续运行,直到自行放弃或执行完毕.

3.多核下线程调度
多核下,每个cpu拥有一个运行队列.每个可运行线程只能存在于一个cpu的运行队列中.
调度算法会在多个cpu之间自动执行负载均衡.
允许通过系统调用设置线程cpu亲和性,设置的结果是被设置线程只会在其亲和的cpu上调度运行.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值