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中也有介绍。
- linux内核调度器进化史:O(n)->O(1)->O(log(n))
- linux内核调度器进化史:O(n)->O(1)->O(log(n))
- O(n)
- num的n次方 O(log(n))
- LIS O(n log n) 详解
- o(1), o(n), o(logn), o(nlogn)
- linux o(1)调度
- 求N!最后非0位 O(N log N)
- hdu 1025&hdu 1025 LIS(O(n*n)和O(n*log(n)))两种解法
- 3070 Fibonacci(O(log n)求解 )
- 快速幂( O(log n) )
- SkipList时间复杂度分析O(log n)
- 时间复杂度:O(1)、O(n)、O(n²)、O(nlogn)等是什么意思,白话文解释专业术语。
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)
- LCA <O(N), O(sqrt(N))>
- 小红书上两种素数打表时间对比O(n*log(n)) O(n)
- 最长递增子序列O(N^2),O(N log(N))
- O(n^1/2) isPrime
- 把握销售中的八个细节记好销售日记
- Win7 下装 Ubuntu 双系统遇到的一些问题及解决
- pku_1111_Image Perimeters
- lua中Function
- SGU 168
- linux内核调度器进化史:O(n)->O(1)->O(log(n))
- Lua的function、closure和upvalue
- apache在Windows下单线程巨慢无比解决办法,,,,
- VC++中CMAP用法
- open-drain, push-pull,MOSFET, MOS管,三极管等基础知识
- 谈谈我的首个开源项目WeiboSpider(1)——单元测试
- 软考之软工基础知识(1)
- 菜鸟解读zstack中的回调函数
- 把握销售中的八个细节做个完善的销售计划(1)