前面一篇文章用图表的形式阐述了cfs的原理,然后那张图表所展示的行为仅仅是理想意义上的行为,我们看一 下它有何不足,它的不足就是太精确了,为何这么说呢?看看每一个vruntime归一化的时间区间,每一个进程运行了好几次,每次运行的时间就是它的速 度,可以看出,权值大的进程其虚拟时钟跑得慢,这样就可以多跑几次,注意它们每次跑时消耗的物理时间是一样的,cfs的理论就这样实现了公平,如果用代码 实现那张图表,结果就是每次时钟中断中都要将当前进程与红黑树中的其余进程作一番权衡比较,这样的结果就是内核调度其可以非常非常精确的以时钟中断的精度 来跟踪各个进程的虚拟时间流逝进而选择最慢的进程,想到这里可以看出,2.6.23中原始的cfs版本就是这么做的,就是在每一次时钟中断处理中先入队再 出队,如果当前进程不是最慢的进程了,那么调度,可是这样的话会造成频繁调度,特别是各个进程权值相同的情况下,大家伙就会波浪式前进,最终的曲线很平 滑,可是内核偏偏不喜欢这种绝对的优美,那么还是将这种优美留给数学家吧。注意,运行中内核的意义就是权衡,就是折中,就好比生活一样,难道人生不是在折 中中前进吗?不能太极端,这就是中庸之道的精髓啊。