【Java进阶营】Java多线程并发:进程调度算法

2022-05-03  本文已影响0人  梦幻小孩斋

一、优先调度算法

1.先来先服务调度算法(FCFS)

当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队
列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采
用 FCFS 算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,
使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机,特点是:算法比较
简单,可以实现基本上的公平。

2.短作业(进程)优先调度算法

短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们
调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,
将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重
新调度。该算法未照顾紧迫型作业。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

二、 高优先权优先调度算法

为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度 算法。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。 当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。

1.非抢占式优先权算法

在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下 去,直至完成;或因发生某事件使该进程放弃处理机时。这种调度算法主要用于批处理系统中; 也可用于某些对实时性要求不严的实时系统中。

2.抢占式优先权调度算法

在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只
要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)
的执行,重新将处理机分配给新到的优先权最高的进程。显然,这种抢占式的优先权调度算法能
更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批
处理和分时系统中。

3.高响应比优先调度算法

在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行
得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时
间的增加而以速率 a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的
变化规律可描述为:

image

三、基于时间片的轮转调度算法

1.时间片轮转法

在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度
时,把 CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几 ms 到几百 ms。当执行
的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,
并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执
行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处
理机执行时间。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

2.多级反馈队列调度算法

上一篇 下一篇

猜你喜欢

热点阅读