linux内核调度器进化史:O(n)->O(1)->O(log(n))

来源:互联网 发布:微信删好友软件 编辑:程序博客网 时间:2024/05/22 12:21

一开始的调度器是复杂度为O(n)的始调度算法(实际上每次会遍历所有任务,所以复杂度为O(n)),这个算法的缺点是当内核中有很多任务时,调度器本身就会耗费不少时间,所以,从linux2.5开始引入赫赫有名的O(1)调度器,所以现在能看到的网上很多资料及教程书里面都讲的都是这个调度算法。

然而,linux是集全球很多程序员的聪明才智而发展起来的超级内核,没有最好,只有更好,在O(1)调度器风光了没几天就又被另一个更优秀的调度器取代了,它就是CFS调度器 Completely Fair Scheduler。这个也是在2.6内核中引入的,具体为2.6.23,即从此版本开始,内核使用CFS作为它的默认调度器,O(1)调度器被抛弃了。

所以完全有理由相信,后续如果再会出现一个更优秀的调度器,CFS也不会幸免。因为我们linux只要最好的那个。

CFS目前在国内中文资料还太少,估计主要原因是,那些linux相关的经典著名目前基本上已经全了,而这些书大都是基于2.4或2.6内核写的,当时还没有引入CFS,所以就没相关资料。而且国外的英文书等到翻译再到国内出版估计至少也得3年时间,那时黄花菜都凉了。

CFS方面的资料:

http://www.ibm.com/developerworks/cn/linux/l-completely-fair-scheduler/index.html?ca=drs-cn-0125

另外内核文档sched-design-CFS.txt中也有介绍。