//进程调度算法
进程调度算法是CPU通过进程调度算法决定某个时刻去调用哪个进程到CPU上运行的算法
1、先来先服务调度算法
每次从就绪队列的队头调度到CPU上运行,直到进程退出或被阻塞,才会继续从队列中调度进程运行。
特点:对短作业不利,对长作业有利,无法平衡短作业与长作业。
2、最短作业优先调度算法
每次调度就绪队列中运行时长最短的进程,直到进程退出或被阻塞,才会继续从队列中调度进程运行。
特点:增加了吞吐量,对短作业有利,但对长作业不利,无法平衡短作业与长作业。
3、高响应比优先调度算法
每次进行进程调度时,先计算就绪队列中的响应比,选择响应比最高的进程调度到CPU上。
响应比=(等待时间+要求服务时间)/要求服务时间,当等待时间相同时,短作业服务时间短,则响应比高,对短作业有利。当要求服务时间相同时,等待时间越长,则响应比越大,对长作业有利。
所以高响应比优先调度算法兼顾了短作业与长作业。
4、时间片调度算法
最古老、最广、最简单、公平的方法就是时间片调度算法
就是就绪队列中的每个进程被调度到CPU上运行的时间都是固定的一个时间片(时钟中断),如果进程运行时间到了,那么CPU就会释放该进程,让下一个进程调度到CPU。如果进程在时间片结束前阻塞或结束,则CPU立即进行切换。
5、优先级调度算法
对于计算机来说,实际应用中有些进程是更为紧迫和更为需要的,所以此时就产生了优先级的概念,优先级调度就是从就绪队列中选择优先级高的任务调度到CPU上运行。
在消息队列中(kafka)中设计的有优先级队列这种模块,C++里面使用priority_queue<pair<int,function<void()>>来实现任务的优先级,第一个参数int代表优先级,第二个参数function<void()>代表任务函数。
静态优先级是一开始设置好优先级,而动态优先级是根据运行过程中,如果运行时间增加则降低优先级,等待时间增加就提升优先级。
6、多级反馈队列调度算法
多级即多个队列,从上到下优先级降低的多个队列
反馈表示当有新的进程加入优先级较高的队列时,运行在CPU上的进程会被阻塞,然后CPU调度新进程。
其结构如上图所示,从上到下队列优先级依次降低,且优先级越高的队列时间片越短