线程调度器(Thread Scheduler):
操作系统的核心,它实际上就是一个常驻内存的程序,不断地对线程队列进行扫描,
利用特定算法(时间片轮转法、优先级调度法、多级反馈队列调度法(MLFQ等),找出比
当前占有CPU的线程更有CPU使用权的线程,并从之前的线程中收回处理器,再使待运
行的线程占用处理器。
线程调度策略(Thread scheduling policy):
(1)时间片轮转调度策略(采用剥夺策略)
时间片: 每个进程被分配一时间段,称作它的时间片,即该进程允许运行的时间
每次调度时,总是选择就绪队列的队首进程,让其在CPU上运行一个系统预选设置
好的时间片。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进
程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的
就是维护一张就绪进程列表,当进程用完它的时间片,它被移到队列的末尾。
(2) 抢占式调度策略
Java运行时系统的线程调度算法是抢占式的。Java运行时系统支持一种简单的固定优先级的调度算法。
如果一个优先级比其他任何处于可运行状态的线程都高的线程进入就绪状态,那么运行时系统就会选择该
线程运行。新的优先级较高的线程抢占了其他线程。当系统中的处于就绪状态的线程都具有相同优先级时,
线程调度程序采用一种简单的,非抢占式的轮转的调度顺序。
(3) 多级反馈队列
1. 设置多级队列,安排各个队列的优先级,1级的队列优先级最高,队列的级别数越高优先级越低。
2. 设置各个队列的时间片,1级的时间片最短,然后逐级递增。
3. 新进程进入队列的方法,一个新的进程进入了之后先进入1级队列,一个时间片完了之后没有执行完的
话就放入2级队列,以此类推
4. 队列之间的调度是按优先级进行调度,从高到低
5. 一个进程进入较高的优先级的时候需要重新开始调度。