系统调度问题
一、什么是调度
当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状,这个分配CPU时间的过程就是调度
二、调度的方式
2.1 非剥夺方式:分派程序一旦把CPU分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。
2.2 剥夺方式
当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的CPU,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。
例如,有三个进程P1、P2、P3先后到达,它们分别需要20、4和2个单位时间运行完毕。
26个单位时间,平均周转时间是23.33个时间单位。
假如用时间片原则的剥夺调度方式,可得到:
可见:P1、P2、P3的周转时间分别为26、10、6个单位时间(假设时间片为2个单位时间),平均周转时间为14个单位时间。
衡量进程调度性能的指标有:周转时间、响应时间、CPU-I/O执行期
三、为什么出现调度不过来?
3.1调度不过来,简单来说,就是要求CPU在1小时内做1.5小时的工作量,CPU在1小时做不过来,就导致部分任务无法做;
3.2为什么出现?
CPU性能(工作效率:跟频率,cpu核数相关)不足以胜任这份工作量
工作量太大,减少工作量
程序占用太多CPU,要写出好的程序,1.尽量少调用效率低的接口(哪些是接口比较耗cpu???),2.线程/进程不需要CPU时,主动让出来;