linux - 工作窃取和内核级线程

标签 linux multithreading process kernel work-stealing

工作窃取是用户级线程的常用策略。每个进程都有一个工作队列来拿工作,当他们没有工作要做时,会从其他人的队列中窃取。

是否有任何内核为内核级线程实现这种策略?如果不是,原因是什么?

我相信在 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_Schedulerhttp://en.wikipedia.org/wiki/Multilevel_feedback_queue )。出于这个原因,工作窃取实现是在用户级进行的,因为它们的目标是在进程内调度用户级线程而不是内核线程。

关于linux - 工作窃取和内核级线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28648451/

相关文章:

c++ - 如何检测进程的cpu/内存使用情况并在超过一定值时将其杀死?

Bash:启动并终止子进程

c++ - 如何使用 boost thread win32-mt-s 构建 boost(与 mingw 交叉编译)

linux - Linux 上的 Putty 无需使用终端程序

linux - 如何使用 sed 或 awk 或类似的东西来替换每个奇怪的字符?

android - Linux : Udp packet is kept in buffer or dropped when network is unreachable? 我怎么证明呢?

java - 调用数据库时应用程序卡住

c# - 对调度程序和异步感到困惑

c - 使用 MPI,消息似乎在发送之前已收到

c++ - Linux - 查找进程是否准备就绪或正在运行