调度算法
一、常用的进程调度算法,如进程中的调度:
先来先服务调度算法
按照作业/进程到达的先后顺序进行调度,即:优先考虑在系统中等待时间最长的作业。排在长进程后的短进程的等待时间长,不利于短作业/进程。
短作业优先调度算法
短作业/进程(要求服务最短时间)在实际情况中占有很大比例,为了使得它们优先执行对长作业不友好
高响应比优先调度算法
在每次调度时,先计算各个作业的优先权,优先权=响应比=(等待时间+要求服务时间)/要求服务时间,
因为在等待时间与服务时间之和就是系统对该作业的响应时间,所以选择优先权高的进行服务。但是要计算优先权信息,增加了系统开销
时间片轮转调度算法
轮流的为各个进程服务,让每个进程在一定的时间间隔内都可以得到响应,由于高频率的进程进行切换,会增加开销,且不区分任务的紧急程度。
优先级调度算法
根据任务的紧急程度进行调度,高优先级的先处理,低优先级的慢处理,如果高优先级的任务很多并且持续产生,那低优先级的可能很慢才被处理
二、常用的线程调度算法
线程调度是指系统为线程分配Cpu使用权的过程,分为两种:
- 协同式线程调度(分时调度模式):线程执行时间由线程本身来控制,线程把自己的工作执行完之后,要主动通知系统切换到另外一个线程上。最大的好处就是实现简单,且切换操作对线程自己是可知的,没啥线程同步的问题。坏处是线程执行的时间不可控制,如果一个线程有问题,可能一直阻塞住。
- 抢占式线程调度:每个线程将由系统来分配时间,线程的切换不由线程本身来决定,(java的Thread.yield()可以让出执行时间,但无法获取执行时间)。线程执行时间不可控,也不会有一个线程导致整个线程阻塞。