进程调度策略
进程调度的关注点:
- 性能:执行完所有任务需要的总时间。
- 公平性:每个任务都期望自己先被执行,尽早完成。
- 响应时间:首次运行时间 - 任务提交时间。
性能、公平性、响应时间是矛盾的,为了达到最好的性能,我们希望cpu不要在不同进程或线程之间切换,这样避免了上下文的切换,一个任务从开始执行到结束,但这样势必会带来不公平,以及很差的响应时间。
FIFO: 最简单的算法,可以说性能最好,没有任何任务切换
SJF(shortest job first): FIFO有个问题,如果第一个到来的任务需要很长时间,那么后面到来的任务即使执行时间很短,也需要等第一个任务执行完成,这样就会造成所有任务都很久之后才能执行完成。有个简单的方法就是SJF,总是保证短的任务先被执行并完成。
RR(round-robin):采用时间分片的方式,cpu轮询调度每个任务,这样可以带来比较好的响应时间。只需要保证CPU单次调度的执行时间 >> 上下文切换时间即可。比如CPU单次最短执行10毫秒,上下文切换1微秒,那么效率也能达到10000/(10000 + 1)