我们知道,在同一时间内,单个cpu只能执行一个任务。如果只是依照 任务的顺序 排队执行,那么当某一个任务占用时间过长,就会导致后续的任务无法被执行

这样无疑是非常低效的,要想解决这个问题,就得靠本文准备讲解的 调度策略,废话不多说,开搞!

ppx.jpg

什么是调度策略

其实就是当存在多个任务需要被cpu执行时,不同的任务调度策略会依据不同的规则来选择不同的任务进行执行,最终目的是实现程序运行的 效率最大化

调度策略如果按照 CPU核心数 来划分,可以分为 单处理器调度策略多处理器调度策略,本文是围绕 单处理器调度策略 展开的,这点需要注意

inte.jpg

调度策略有哪些

先到先得(First-Come-First-Served, FCFS)

这种就是最简单的,它依据 任务排列的顺序 依次执行,这是一种 非抢占策略,它有如下两个缺点

轮询

RR(Round Robin,轮询)算法给每个任务分配一个 相同的 时间片,当任务的时间片用完之后或进入阻塞状态,调度器会中断当前任务,切换到下一个任务,以此类推,这是一种 抢占策略

它需要注意的点是如何确定时间片的大小。如果太大,会导致长进程的cpu占用时间过长,如果太小,会造成频繁的进程切换

通常来讲时间片的长度最好符合大部分进程 完成一次典型交互 所需的时间,这种策略对于 短进程I/O密集进程 不友好

最短进程优先(Shortest Process Next, SPN)

按照进程的 预估执行时间 对进程进行优先级排序,先执行短进程,后执行长进程,这是一种 非抢占策略

进程的预估执行时间一般是由操作系统来收集进程运行数据并进行统计分析后得出的

它有两个缺点

最短剩余时间(Shortest Remaining Time, SRT)

SPN 的基础上,当一个进程添加到就绪队列时,操作系统会比较 刚添加的新进程的执行时间当前正在执行的老进程的剩余时间,如果新进程的执行时间更短,新进程就会抢占老进程,这是一种 抢占策略

它有两个缺点:

最高响应比优先(HRRN)

可以解决长进程饥饿问题,同时提高进程的响应速率,它是依据响应比的大小来决定优先级,这是一种 非抢占策略,下面给出响应比的计算公式

响应比 = (等待执行时间 + 进程执行时间) / 进程执行时间

从公式中我们可以得出以下结论

  1. 对于短进程,由于进程执行时间短,因此分母小,响应比相对就更高,就会被优先执行
  2. 对于长进程,由于进程执行时间长,因此分母大,一开始的响应比会比较低,但是随着等待执行时间的增长,分子越来越大,响应比也随之增大,最终就可以被执行,避免了饿死的情况

xuexi.jpg

没有一种调度策略是银弹,需要根据不同的场景进行选择,主要考虑以下两个因素

这两者其实是互斥的关系,也许这就是所谓的鱼和熊掌不可兼得吧

cat.jpg

结语

随着自己的技术学习不断深入,越来越觉得计算机的世界真奇妙,里面充满了各种智慧,现在觉得学习也是一种享受了,哈哈!

本篇文章所讲内容也是相对比较底层的知识,属于一种长线投资,最终收益就是我们的技术内功,所以,一起加油吧,骚年!