工作窃取是用户级线程的常用策略。每个进程都有一个工作队列来拿工作,当他们没有工作要做时,会从其他人的队列中窃取。
是否有任何内核为内核级线程实现这种策略?如果不是,原因是什么?
我相信在 Linux 中有内核级线程中线程迁移的概念,它将线程从高负载处理器迁移到低负载处理器,但这似乎是一种不同的算法。但如果我错了,请纠正我。
谢谢
最佳答案
工作窃取调度器是一个并行计算调度器。它通常位于用户级库(如 Intel tbb: https://www.threadingbuildingblocks.org/)或什至像 Cilk (https://software.intel.com/en-us/intel-cilk-plus) 这样的语言
内核级线程由操作系统调度,因此调度技术有很大不同。例如,在工作窃取调度程序中,目标之一是限制内存使用(如原始论文所示:http://supertech.csail.mit.edu/papers/steal.pdf)并实现线程存储在双端队列中。但是,在操作系统的调度程序中,主要目标是在用户之间保持公平,为每个进程/内核线程提供公平的运行时间(如最大-最小公平状态:http://en.wikipedia.org/wiki/Max-min_fairness)等。操作系统的调度程序甚至使用内核线程/进程之间的不同优先级(请参阅 http://en.wikipedia.org/wiki/Completely_Fair_Scheduler 或 http://en.wikipedia.org/wiki/Multilevel_feedback_queue )。出于这个原因,工作窃取实现是在用户级进行的,因为它们的目标是在进程内调度用户级线程而不是内核线程。
关于linux - 工作窃取和内核级线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28648451/