作业调度的常见算法:

最容易想到,最简单的,就是先来先服务算法,它的本质,其实是按等待时间来进行调度,谁先来,先运行,看起来比较合理,但是,这种调度策略,没有从系统的角度去考虑,大家可以想象一下,我们去银行办理业务,排队,如果第一个人是大作业,办理时间很长,导致一上午,可能办理不了多少人的业务,在我们操作系统里,称为吞吐量低,从系统的角度看,吞吐量小,完成的任务数少,所以,我们总结一下。

先来先服务算法,它的好处是,大作业可以得到运行,但吞吐量小。为了提高吞吐量我们很容易想到—小作业优先,这样,完成的任务就多,因此,提出短作业优先的算法,明显,短作业优先算法,吞吐量大,但是,这个算法,有可能导致大作业长期得不到运行,就好比什么情况,比如,你在排队,有人说插个队,你一看,很短时间,就同意了,如果,不停的插队,你肯定受不了了,对大作业来讲,等待时间太长,总之,短作业优先,好处是吞吐量大,但大作业可能长期处于饥饿状态,不公平,因此,早期学者提出,折中的办法,既考虑等待时间,又考虑吞吐量,提出高响应比算法,大家看响应比的公式

作业调度算法java编写 作业调度算法总结_动态优先级


这个指标,可以看成优先级,值越大,就先调度谁,看公式,一开始,等待时间为0,所以会选择运行时间小的,相当于一开始时,短作业优先,但是随着等待,等待时间变大,响应比慢慢的就变大,优先级就高,从而最终会得到运行,响应比算法,考虑了吞吐量,又考虑了等待时间。看起来比较好,但是,大家想一下,这个算法其实是比较难实现的,因为要实现这个算法,首先要得到响应比,也就是要得到等待时间,和运行时间,等待时间,可以隔一段时间刷新一次。但是,运行时间怎么来?这个是不可能事先得到的,所以,这个算法也只是停留在理论阶段,视频还提到优先级算法。顾名思义,哪个优先级高,先运行,对于优先级算法来讲,最重要的是怎么确定,优先级,常见的方法有两种,静态,动态。

静态优先级,顾名思义,一旦确定了,优先级不住发生变化的;

动态优先级,随着运行,不断发生变化的,像高响应比,其实就是动态优先级,两者比较,动态优先级,更好些。因为动态的,考虑了多种因素,更公平,否则,考虑一下极端情况,如果后面的优先级都比我高,那么我永远得不到运行。

最后总结一下,几种算法,理论上,动态优先级算法,高响应比优先理论上,比较好一点,但是不容易实现,所以,我们要考虑,有没有容易实现的替代方法,我举个例子,比如先进先出,本质是按等待时间来调度,但是,对于实现,没有必要统计等待时间这个指标,这很耗系统开销,实际上,我们实现的时候,用一个队列就可以了,排前面的,等待时间长,没必要统计,开销很大的数据,所以,我们在实现的时候,有些不容易实现的,我们要考虑有没有容易实现的替代方法。