线程调度算法有那些呢?

558 阅读1分钟

前提

  • 本文非原创,意外巧合在一个公开课的 ppt 里看到的,感觉内容有点像大学里老师讲的,就截屏下来,编辑成文档,温故一下以前学的内容;哪个公开课,,我真的忘记了。

1:先进先出(FIFO)

  • 优点:
    • 1:任务切换开销小
    • 2:吞吐量大
    • 3: 先来先做 公平性
  • 缺点:
    • 响应时间高

2: 最短耗时任务优先(Shortest Job First SJF)

  • 优先调度耗时时间短的
  • 优点
    • 响应时间比较低
  • 缺点
    • 1:耗时时间长的任务一直在等,形成饥饿
    • 2:频繁切换线程上下文,额外开销增大
  • 适用场景
    • 几乎所有场景

3:时间片轮转(RR)Round Robin

  • 每个任务都分时间片,任务完成时间顺序是以耗时时间从小到大排列

  • 优点

    • 1:每个任务都公平调度
    • 2:哪怕耗时短的任务,在耗时长的任务后面,也可以快速调度执行耗时短的任务
  • 缺点

    • 1:上下文切换开销大,尤其是 cpu 缓存
    • 2: 时间片如何设置?(设置时间短了。调度开销大,设置时间过长,那最极端的的情况就是和 FIFO 一样)
  • 适用场景:耗时差不多的任务

  • 不适用场景:任务需要大量计算。如:对 IO 读写任务

4: 最大最小公平算法 (Max-Min Fairness)

  • 就是为了保证公平性

5: Multi-level Feedback Queue (MFQ)

  • 这个算法兼顾 响应时间 ,低调度开销,饥饿避免,公平;