一, 什么是调度
当有多个线程在操作时, 如果系统只有一个 CPU, 则它根本不可能真正同时进行一个以上的线程, 它只能把 CPU 运行时间划分成若干个时间段, 再将时间段分配给各个线程执行, 在一个时间段的线程代码运行时, 其它线程处于挂起状, 这个分配 CPU 时间的过程就是调度
二, 调度的方式
2.1 非剥夺方式: 分派程序一旦把 CPU 分配给某进程后便让它一直运行下去, 直到进程完成或发生某事件而阻塞时, 才把处理机分配给另一个进程.
2.2 剥夺方式
当一个进程正在运行时, 系统可以基于某种原则, 剥夺已分配给它的 CPU, 将之分配给其它进程. 剥夺原则有: 优先权原则, 短进程优先原则, 时间片原则.
例如, 有三个进程 P1,P2,P3 先后到达, 它们分别需要 20,4 和 2 个单位时间运行完毕.
假如它们就按 P1,P2,P3 的顺序执行, 且不可剥夺, 则三进程各自的周转时间分别为 20,24,
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 时, 主动让出来;
来源: http://www.bubuko.com/infodetail-2931344.html