首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微线程和工作队列的区别是什么?

微线程和工作队列的区别是什么?
EN

Stack Overflow用户
提问于 2013-08-19 19:44:36
回答 1查看 11.2K关注 0票数 13

我是一个Linux设备驱动程序新手,我想知道taskletworkqueue之间的确切区别。我有以下疑问:

  1. 在中断/进程上下文中运行时,中断、线程和工作队列使用哪些内核堆栈?
  2. tasklet和workqueue将以什么优先级运行,我们可以修改它的优先级吗?
  3. 如果我实现了自己的工作队列列表,我可以独立地安排/排序吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-19 20:53:53

Tasklet

  • 老了(我相信是2.3岁左右)
  • 有一个简单明了的API
  • 是为低延迟而设计的
  • 无法睡眠(在软IRQ上下文中原子地运行,并且保证在给定处理器的多个CPU上运行,对于给定的微线程)

工作队列

  • 是最近的(在2.5中引入)
  • 有一个灵活的API (支持更多选项/标志)
  • 是为更高的延迟设计的。
  • 能睡

底线是:为高优先级、低延迟的原子任务使用tasklet,这些任务仍然必须在硬IRQ上下文之外执行。

您可以使用tasklet_hi_enable/tasklet_hi_schedule (而不是它们各自的非_hi版本)来控制线程的优先级级别。来自this IBM page

正常优先级调度通过TASKLET_ softirq级别的软HI执行,其中高优先级通过HI_ softirq级别的软HI执行。 ..。 首先服务高优先级向量的微线程,然后是法线向量上的微线程.请注意,每个CPU维护自己的正常和高优先级的软向量。

对于工作队列,在创建工作队列时,您将使用alloc_workqueue (不推荐使用create_workqueue)和can pass a flag来请求更高的优先级:

WQ_HIGHPRI: highpri的工作项排队到目标gcwq的highpri线程池。Highpri线程池由高级别的工作线程提供。 注意,普通线程池和highpri线程池不会相互交互。它们各自维护各自的员工池,并在员工之间实现并发管理。

我不能回答你所有的问题,但我希望这能帮上忙。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18321858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档