Cod*_*deQ 6 kernel kernel-module linux-kernel
当他们被创建为以下时,我很困惑b/w workqueues和kthread
为每个在线CPU创建kthread并绑定到1个唯一的CPU
for_each_online_cpu(cpu) {
kthread = kthread_create(func, ...);
kthread_bind(kthread, cpu);
}
//Each kthread will process work in serialized manner
Run Code Online (Sandbox Code Playgroud)
为@max_active为1的每个在线CPU创建BOUND工作队列
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.
Run Code Online (Sandbox Code Playgroud)
如果我的理解是正确的,那么请告诉我kthread优于工作队列的优点,反之亦然.
提前致谢.
"工作"是一些应该在合理的时间内完成的行动.虽然它可以睡眠,但它不应该长时间这样做,因为多个工作项共享相同的工作线程.
只要你愿意,你就可以运行一个线程.它不必为了做其他工作而返回某个调用者,所以你可以把它放在一个循环中(通常这样做).循环可以包含任意睡眠.
工作队列用于调用者本身无法执行预期操作的情况,例如因为它是一个中断服务例程,并且中断工作太长,或者不适合在中断中运行(因为它需要一个进程)上下文).
| 归档时间: |
|
| 查看次数: |
3338 次 |
| 最近记录: |