我知道Linux调度程序会调度线程,而不是进程,但我不明白进程中的线程是如何进行调度的。
假设我有一个带有线程T1,T2的进程P1和一个带有线程T1,T2,T3的进程P2。现在调度程序必须安排5个任务。 P1T1,P1T2,P2T1,P2T2和P2T3。如果调度程序选择P1T1然后选择P2T2,这将导致进程上下文切换,这会破坏线程的目的。在这种情况下,调度程序如何工作?
答案 0 :(得分:0)
从P1T1切换到P1T2是一个上下文切换。 P1T1到P1T2上下文切换和T1P1到T2P1上下文切换之间的唯一区别是对高速缓存抖动的影响,主要是TLB高速缓存,在现代处理器中由于MMU使用ASID而非常小。
即使没有ASID支持,这些进程间上下文切换实际上花费更多并且当它们这样做时它是显着的并不明显。有关详细信息,请参阅下面的CELF演示文稿。
鉴于上述情况,内核调度程序不会也不应该关心。
视频http://free-electrons.com/pub/video/2009/elce/elce2009-ben-yossef-threads-processes.ogv
答案 1 :(得分:0)
Linux调度程序增长如此之快,算法也是如此。如果您考虑使用CFS调度程序,请查看http://www.ibm.com/developerworks/library/l-completely-fair-scheduler/。
您可以在 CFS小组安排部分找到答案。
希望这会有所帮助。