[内核]Takslet和Workqueue的应用场景

Posted aaronGao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[内核]Takslet和Workqueue的应用场景相关的知识,希望对你有一定的参考价值。

转自:http://blog.chinaunix.net/uid-20382483-id-4077101.html

tasklet

Workqueue

处于atomic context,不能sleep

不处于atomic context,可以sleep

处于中断上下文,OS不可以进行进程调度

处于进程上下文,OS可以进行进程调度

运行调度它们的同一个CPU上

默认同一个CPU上

不能指定确定时间进行调度

不能指定确定时间进行调度或者指定至少延时一个确定时间后调度

只能交给ksoftirqd/0

可以提交给events/0,也可以提交给自定义的workqueue

Tasklet函数带参数

Work函数不带参数

 

Tasklet与workqueue的不同应用环境总结如下:

  • [极少量任务]:必须立即进行紧急处理的极少量任务放入在中断的顶半部中,此时屏蔽了与自己同类型的中断,由于任务量少,所以可以迅速不受打扰地处理完紧急任务。
  • [中等数量任务]:需要较少时间的中等数量的急迫任务放在tasklet底半部中。此时不会屏蔽任何中断(包括与自己的顶半部同类型的中断),所以不影响顶半部对紧急事务的处理;同时又不会进行用户进程调度,从而保证了自己急迫任务得以迅速完成。
  • [大量任务]:需要较多时间且并不急迫(允许被操作系统剥夺运行权)的大量任务放在workqueue中。此时操作系统会尽量快速处理完这个任务,但如果任务量太大,期间操作系统也会有机会调度别的用户进程运行,从而保证不会因为这个任务需要运行时间将其它用户进程无法进行。
  • 可能引起睡眠的任务放在workqueue中,因为在workqueue中睡眠是安全的
 

以上是关于[内核]Takslet和Workqueue的应用场景的主要内容,如果未能解决你的问题,请参考以下文章

[内核]Linux workqueue

Linux(内核剖析):26---中断下半部之(工作队列机制(workqueue_structcpu_workqueue_struct))

Linux内核模块编程可以使用的内核组件

Linux tasklet 和workqueue学习

2.1. 异步任务执行:workqueue与taskwork

2.2. 异步任务执行:workqueue与taskwork