tasklet和workqueue有什么区别

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

  • 在中断/进程环境中运行时,哪个内核堆栈会中断,使用tasklet和workqueue?
  • tasklet和workqueue运行的优先顺序是什么,我们可以修改它的优先级吗?
  • 如果我实施自己的工作队列表,我可以独立安排/优先考虑吗?

  • Tasklets

  • 老了(我相信2.3左右)
  • 有一个简单,简单的API
  • 专为低延迟而设计
  • 无法入睡(在IRQ上下文中自动运行,并且保证永远不会在给定处理器的多个CPU上运行,对于给定的tasklet)
  • 工作队列

  • 是更新的(在2.5中引入)
  • 有一个灵活的API(支持更多选项/标志)
  • 专为更高的延迟而设计
  • 可以睡觉
  • 底线是:使用tasklet实现高优先级,低延迟原子任务,这些任务必须仍然在硬IRQ环境之外执行。

    你可以使用tasklet_hi_enable / tasklet_hi_schedule (而不是它们各自的_hi版本)来控制一些优先级。 从这个IBM页面:

    正常优先级调度通过TASKLET_SOFTIRQ级softirq执行,其中高优先级是通过HI_SOFTIRQ级softirq。

    ...

    来自高优先级矢量的Tasklet首先被服务,然后是法向矢量上的服务。 请注意,每个CPU都维护自己的正常和高优先级softirq向量。

    随着工作队列,创建一个时,你将使用alloc_workqueuecreate_workqueue已废弃),并可以通过一个标志,要求更高的优先级:

    WQ_HIGHPRI:

    highpri wq的工作项排入目标gcwq的highpri线程池。 Highpri线程池由具有较高级别的工作线程提供服务。

    请注意,普通和高优先级线程池不会相互影响。 每个人都保持其独立的工作人员队伍,并在其工作人员中实施并发管理。

    我无法回答你所有的问题,但我希望这有助于你。

    链接地址: http://www.djcxy.com/p/84791.html

    上一篇: What is the difference between tasklet and workqueue

    下一篇: Understanding the linux scheduler