本文参考蜗窝大神的中断系列教程
http://www.wowotech.net/irq_subsystem/workqueue.html
一、前言
在许多情况下,需要异步流程执行上下文,而workqueue(wq)API是此类情况最常用的机制。
当需要这样的异步执行上下文时,描述要执行哪个函数的工作项放在队列中。 独立线程用作异步执行上下文。 该队列称为workqueue,该线程称为worker。 虽然工作队列中有工作项(work),但工作人员(worker)依次执行与工作项关联的功能。 当工作队列中没有剩余工作项时,工作人员变得空闲。 当新工作项排队时,工作人员再次开始执行。
workqueue是一个驱动工程师常用的工具,在旧的内核中(指2.6.36之前的内核版本)workqueue代码比较简单(大概800行),在2.6.36内核版本中引入了CMWQ(Concurrency Managed Workqueue),workqueue.c的代码膨胀到5000多行,为了深入的理解CMWQ,单单一份文档很难将其描述的清楚,因此CMWQ作为一个主题将会产生一系列的文档,本文是这一