工作窃取和内核级线程

时间:2015-02-21 16:59:13

标签: linux multithreading process kernel work-stealing

工作窃取是用户级线程的常用策略。每个流程都有一个工作队列,用于工作,并会从其他人那里窃取。他们失业时要排队。

是否有任何内核为内核级线程实现此类策略?如果没有,原因是什么?

我相信Linux在内核级线程中存在线程迁移的概念,它将线程从高负载处理器迁移到低负载处理器,但这似乎是一种不同的算法。但如果我错了,请纠正我。

由于

1 个答案:

答案 0 :(得分:1)

工作窃取调度程序是并行计算调度程序。它通常位于用户级库(如Intel tbb:https://www.threadingbuildingblocks.org/)甚至是Cilk(https://software.intel.com/en-us/intel-cilk-plus)等语言

内核级线程由操作系统调度,因此调度技术完全不同。例如,在工作窃取调度程序中,其中一个目标是限制内存使用(在原始文件中证明:http://supertech.csail.mit.edu/papers/steal.pdf)并实现线程存储在双端队列中。但是,在操作系统的调度程序中,主要目标是在用户之间保持公平,为每个进程/内核线程提供相当长的运行时间(如max-min公平状态:http://en.wikipedia.org/wiki/Max-min_fairness)等。操作系统的调度程序甚至在内核线程/进程中使用不同的优先级(请参阅http://en.wikipedia.org/wiki/Completely_Fair_Schedulerhttp://en.wikipedia.org/wiki/Multilevel_feedback_queue)。出于这个原因,工作窃取实现是在用户级进行的,因为它们的目标是在进程内调度用户级线程而不是内核线程。