B_C_1024 发表于 2015-04-14 19:29

关于linux内核设计与实现上面的问题

请教一个问题:
在看linux内核设计与实现时,在工作队列部分有说:linux的内核开发者们非常反对创建新的内核线程。
为什么反对穿件新的内核线程?

nswcfd 发表于 2015-04-15 18:46

个人觉得这是一个设计选择问题,每个内核线程只处理一种任务 vs.一个内核线程(keventd)处理不同类型的任务。

前者的优点是此类任务独享自己的队列,在普通work很多(即keventd的队列比较满)的情况下,可以得到更快的调度。
缺点是,如果任务种类多了,每个都开自己的thread,那thread之间的调度(任务切换开销/优先级等)就是问题。

而workqueue的实现里,来自不同模块的各种work task在相同per cpu队列上排队,不同的任务一视同仁,不能真实的反映任务之间的轻重缓急。
貌似新版本的内核对此做了改进,还可以根据任务量动态的调节event线程的数量。

从API的角度看,当然是workqueue更简洁了。

B_C_1024 发表于 2015-04-16 21:40

回复 2# nswcfd
多谢了

   
页: [1]
查看完整版本: 关于linux内核设计与实现上面的问题