进程,线程的调度,就像动车的调度。
其基本逻辑都是:
不同的东西(线程,火车),对应不同的优先级(等级)
优先级越高,越被特殊照顾,特殊考虑,被安排先运行(火车在轨道上,进程在内存中,占用CPU)的几率越大,机会越好;
现实中,对于中国的火车,大致分为这几类:G,D,Z,T,K,L等。相对优先级依次降低,对应的,调度时,被安排到的机会和可能性也就降低了。所以有时候会出现,慢车让快车的情况。包括D字头的动车,遇到优先级更高的G字头的高铁,也可能会让车的。
计算机领域中的线程调度,每个线程分一个(有动态和静态之分,此处暂且忽略)优先级,一般都是数字,数字越小,说明优先级越高,比如0,1,2,3,4等等。
所以,如果CPU空闲了,经过线程调度,发现有两个线程,优先级分别是2和3,那么肯定就先安排优先级为2的线程去运行,
运行意味着,占用CPU,开始执行。
等优先级为2的线程运行完毕,再执行线程调度,如果此时:
除了已有的一个优先级为3的线程,另外还有一个优先级为1的线程:那么还是要先去运行优先级更高的,为1的那个线程->相对来说,低优先级的3的线程,还是无法被运行;
除了已有的一个优先级为3的线程,另外还有一个优先级为4的线程:那么由于优先级3比优先级4高,所以就可以安排优先级为3的线程去执行了。
这就是,线程调度的基本逻辑。
更深入的,当然还有其他很多因素:
在普通PC中用到的操作系统中,线程的优先级,多数都是初始化一个值,后期会随着情况变化而动态改变的,不是一成不变的;
嵌入式系统中,更多的时候,线程(进程)的数目都是固定的,已知的,往往都是相对固定的线程,固定的优先级的;