gpt4 book ai didi

linux-kernel - 黑白 kthread 和工作队列的区别

转载 作者:行者123 更新时间:2023-12-04 14:00:32 32 4
gpt4 key购买 nike

当 b/w 工作队列和 kthread 按以下方式创建时,我有点困惑 -

为每个在线 CPU 创建 kthread 并绑定(bind)到 1 个唯一的 CPU

for_each_online_cpu(cpu) {
kthread = kthread_create(func, ...);
kthread_bind(kthread, cpu);
}
//Each kthread will process work in serialized manner

为每个在线 CPU 创建 BOUND 工作队列,@max_active 为 1
for_each_online_cpu() {
wq = alloc_workqueue(name, WQ_MEM_RECLAIM, 1)
}
// queue_work_on(cpu, work) will ensure the works queued on a particular CPU are
processed in a serialized manner.

请让我知道我的理解是否正确以及 kthread 相对于工作队列的优势是什么,反之亦然。

提前致谢。

最佳答案

“工作”是一些应该在合理时间内完成的 Action 。虽然它可以休眠,但它不应该长时间休眠,因为多个工作项共享同一个工作线程。

一个线程是你的,你想运行多久就运行多久。它不必为了做其他工作而返回给某个调用者,所以你可以把它放在一个循环中(这通常是这样做的)。循环可以包含任意 sleep 。

工作队列用于调用者本身无法执行预期操作的情况,例如因为它是一个中断服务例程并且工作对于中断来说太长,或者不适合在中断中运行(因为它需要一个进程语境)。

关于linux-kernel - 黑白 kthread 和工作队列的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23094444/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com