窃取工作是用户级线程的常见策略。每个进程都有一个工作队列,用于接收工作,当其他进程没有工作要做时,它们将从其他进程的队列中窃取。
有没有内核为内核级线程实现这种策略?如果没有,原因是什么?
我相信在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中。然而,在操作系统的调度程序中,主要目标是在用户之间公平,给每个进程/内核线程一个公平的运行时间(如max-min-fairity状态:http://en.wikipedia.org/wiki/Max-min_fairness),等等。操作系统的调度程序甚至在内核线程/进程之间使用不同的优先级(请参见http://en.wikipedia.org/wiki/Completely_Fair_Schedulerhttp://en.wikipedia.org/wiki/Multilevel_feedback_queue)。因此,窃取工作的实现是在用户级实现的,因为它们的目标是在进程中调度用户级线程,而不是内核线程。

08-05 23:00