工作窃取是用户级线程的常见策略。每个流程都有一个工作队列,用于接受工作,当其他人没有工作可做时,会从他们的队列中窃取。
有没有内核为内核级线程实现这样的策略?如果没有,原因是什么?
我相信在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)并且实现线程被存储在deque中。然而,在操作系统的调度器中,主要目标是在用户之间保持公平,给每个进程/内核线程公平的运行时间(正如最大-最小公平状态:http://en.wikipedia.org/wiki/Max-min_fairness)等。操作系统的调度器甚至在内核线程/进程之间使用不同的优先级(请参阅http://en.wikipedia.org/wiki/Completely_Fair_Scheduler或http://en.wikipedia.org/wiki/Multilevel_feedback_queue)。因此,窃取工作的实现是在用户级实现的,因为它们的目标是在进程内调度用户级线程,而不是内核线程。