当前位置: 代码迷 >> 综合 >> 2021-1-15
  详细解决方案

2021-1-15

热度:97   发布时间:2023-10-14 11:37:14.0

2021-1-15

  • 多处理器调度
    • 单队列调度
    • 多队列调度

多处理器调度

单队列调度

最基本的方式是简单地复用单处理器调度的基本架构,将所有需要调度的工作放入一个单独的队列中,我们称之为单队列多处理器调度(Single Queue Multiprocessor Scheduling,SQMS)。这个方法最大的优点是简单。它不需要太多修改,就可以将原有的策略用于多个 CPU,选择最适合的工作来运行(例如,如果有两个 CPU,它可能选择两个最合适的工作)
然而,SQMS 有几个明显的短板。第一个是缺乏可扩展性(scalability)。为了保证在多CPU 上正常运行,调度程序的开发者需要在代码中通过加锁(locking)来保证原子性,如上所述。在 SQMS 访问单个队列时(如寻找下一个运行的工作),锁确保得到正确的结果。锁带来的性能损失会导致系统用在进程上的时间变少了
2021-1-15
加入亲和度机制后
2021-1-15

多队列调度

顾名思义,多队列调度就是每个cpu核心都有一个自己的队列,当进程进入时按顺序分配给不同的cpu
2021-1-15
但这样可能会导致负载不均,考虑当进程只有三个的时候,还按上面的方式分配,会导致有一个进程运行的时间是其他的两倍
2021-1-15
实现的方法也很简单:一个基本的方法是采用一种技术,名为工作窃取。通过这种方法,工作量较少的(源)队列不定期地“偷看”其他(目标)队列是不是比自己的工作多。如果目标队列比源队列(显著地)更满,就从目标队列“窃取”一个或多个工作,实现负载均衡。
但这样又引出一个问题,如何设置工作窃取周期,长了还是会导致负载不均,短了又会导致系统效率下降