瞧进程调度

将固定的资源在所有使用者中分配,而不是为每一个使用者分配固定额度的资源。

说起进程调度,关注“谁先运行”,“一个进程运行多久”,基于此的调度算法没有扩展性,比如Linux的O(1)算法。

没有扩展性的原因是每个进程被分配了相对固定的时间片,该时间片基于优先级计算,p是优先级,时间片就是:

t s = 20 × ( 140 − p ) ts=20\times(140-p) ts=20×(140p)

进程越多,所有进程轮转一遍的时间越久。为了解决扩展性问题,需要诸如双斜率缩短调度周期,启发式防饥饿等把戏,算法不断被修补,越来越复杂冗长。

这类算法只是批处理的缩微版本,将批任务打散成小任务片,然后在时间轴上轮转这些小任务片。与批处理无大异。

颠倒一下,不再为每个进程分配固定的时间片,而是将固定的时间段分配给所有的进程,就是CFS算法了。

若固定时间片,每个进程连续两次运行间隔随进程数增加而增加,观感上就是越发卡顿,若固定时间段分配给所有进程,每个进程连续两次运行间隔便固定,每次运行的时间片随进程数增加而缩短,观感上就是平滑变慢。

卡顿和慢,你选哪一个?很多司机乘客都是宁可慢不想停的。

将固定的资源在所有使用者中分配,而不是为每一个使用者分配固定额度的资源。

还是那个颠倒技巧,后果则有大不同,万变不离其宗。

浙江温州皮鞋湿,下雨进水不会胖。

你可能感兴趣的:(进程调度)