java中的线程调度与进程调度

1线程调度

抢占式调度:通过抢占的方式获取cpu资源并快速执行,执行完毕后释放cpu资源,具体哪些资源能获得cpu资源由操作系统控制。
适用于多线程并发执行的情况,在这种机制下,一个线程的堵塞不会导致整个系统的性能下降。

协同式调度:某一个线程在执行完后主动通知操作系统将cpu资源切换到另一个线程上执行,线程对cpu的占有时间由线程自身控制。
适用于多线程交替执行某些任务的情况,若一个线程因外部原因运行阻塞,那么可能导致整个系统阻塞甚至崩溃。

2进程调度
(1)优先调度算法

先来先服务调度算法:按照进入队列的顺序,分配资源、创建进程、放入就绪队列等待cpu资源并执行。
优先运行最早进入的任务,实现简单且相对公平。

短作业优先调度算法:每次调度时从队列中选择一个或多个预估运行时间最短的作业,分配资源、创建进程、放入就绪队列。调度算法获得可用cpu资源后,为就绪队列选择一个预估运行时间最短的进程分配cpu资源并执行。
优先运行短时间作业,提高了cpu整体的利用率和系统运行效率,但可能会出现大任务长时间得不到调度的情况。

(2)高优先权优先调度算法

高优先权优先调度算法在定义任务时为每个任务都设置不同的优先权,任务调度时优先权高的任务优先被调度。

非抢占式优先调度算法:按优先权分配资源、创建进程、加入就绪队列,获得cpu资源后执行。
一旦将cpu资源分配给某个进程就不会主动回收cpu资源,进程一直持有该cpu,直到任务执行完毕或发生异常而放弃cpu。

抢占式优先调度算法:将cpu分配给优先权最高的任务并运行。但若在运行过程中出现比当前任务优先权更高的任务,调度算法会暂停当前任务并回收cpu资源,将其分配给优先权更高的任务。

高响应比优先调度算法:使用动态优先权的概念。任务执行时间越短、等待时间越长优先权越高。
在保障效率(短作业优先能很大程度提高cpu的使用率和系统性能)的基础上尽可能提高了调度的公平性(任务等待时间增加,优先权提高,遵循了先来先到原则)。

(3)时间片的轮转调度算法

将cpu资源分成不同的时间片,不同的时间片为不同的任务服务。

时间片轮转法:按照先来先服务原则从就绪队列中取出一个任务,并为其分配一定的cpu时间片去执行,使用完cpu时间片后,由一个时间计时器发出时钟中断请求,调度器收到请求立即停止进程并将其放入就绪队列队尾,再从队首取出一个进程分配cpu时间片执行。

多级反馈队列调度算法:在时间片轮询算法基础上设置多个就绪队列,为每个队列设置不同的优先权。优先权越高,被分配的时间片越大。默认第一个队列优先权最高,其他次之。
算法流程为:系统收到新的任务后,首先将其放入第一就绪队列的队尾,按先来先服务调度算法等待调度。若该进程在规定的cpu时间片内运行完成或出现错误,则退出进程并在系统中移除该任务;若该进程在规定的cpu时间片未完成,则将该进程转入第二队列的队尾等待调度;以此类推,在一个长作业从第一队列以此降至第n队列后,第n队列中便以时间片轮转的方式运行。
注意:
第一个队列为空时才调度第二个队列中的任务;
前n-1个队列为空时才调度第n个队列的任务;
若在执行某个队列中的任务时,有线的进程进入优先级高的队列,将会抢占正在运行的进程的处理器。

多级反馈队列调度算法充分考虑了先来先服务调度算法与时间片轮询算法的优势,使得对进程的调度更加合理。

发布了13 篇原创文章 · 获赞 1 · 访问量 1765
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览