本文参考蜗窝大神的中断系列教程

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作为一个主题将会产生一系列的文档,本文是这一系列文档中的第一篇,主要是基于2.6.35.7内核的代码实现来讲述workqueue的一些基本概念(之所以选择较低版本的内核,主要是因为代码简单,适合理解基本概念)。

二、为何需要workqueue

Workqueue 是内核里面很重要的一个机制,特别是内核驱动,一般的小型任

设备树学习(二十五、番外篇-中断子系统之workqueue[1])相关推荐

  1. 设备树学习(十七、番外篇-中断子系统之内核对中断控制器的解析)

    一.介绍 关于中断的初始化我们从start_kernel函数开始 head_common.Sb start_kernel(void);....local_irq_disable(); /* 关中断 * ...

  2. 设备树学习(二十三、番外篇-中断子系统之softirq)

    既然开始学了,那么还是一次把中断的所有知识都系统的学一下.刚好有蜗窝大神的博客做指引. http://www.wowotech.net/irq_subsystem/soft-irq.html 一.前言 ...

  3. 设备树学习(十八、番外篇-中断子系统之初始化一个中断控制器)

    一.前言 上一篇写到,使用设备树的情况下,对所有的中断控制器进行了检索,提取到一个链表中.并对这些中断控制器中所谓的父中断控制器进行检索,并按照等级一次初始化.本文就以一种常见的中断控制器VIC的初始 ...

  4. 设备树学习(十五、番外篇-中断子系统之IRQ Domain介绍)

    之前的文章分析过没使用设备树时,中断是如何初始化的 https://blog.csdn.net/qq_16777851/article/details/82556519 用一句话总结就是,启动过程,通 ...

  5. 设备树学习(二十二、番外篇-中断子系统之驱动申请API)

    本文继续参照蜗窝大神的文档,采用4.19内核的代码学习,同时会有自己的一些举例和部分代码分析 http://www.wowotech.net/sort/irq_subsystem 一.前言 本文主要的 ...

  6. 设备树学习(二十六、番外篇-中断子系统之CMWQ概述[2])

    一.前言 一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入CMWQ(Concurrency Managed Workq ...

  7. PostCSS自学笔记(二)【番外篇二】

    图解PostCSS的插件执行顺序 文章其实是一系列的早就写完了. 才发现忘了发在SegmentFault上面, 最早发布于https://gitee.com/janking/Inf... 这次我继续研 ...

  8. Java多线程学习二十五:阻塞和非阻塞队列的并发安全原理||如何选择适合自己的阻塞队列?

    阻塞和非阻塞队列的并发安全原理. 之前我们探究了常见的阻塞队列的特点,以 ArrayBlockingQueue 为例, 首先分析 BlockingQueue 即阻塞队列的线程安全原理,然后再看看它的兄 ...

  9. opencv学习(二十五)之开运算、闭运算、形态梯度、顶帽、黑帽

    上一篇介绍了形态学的基本操作膨胀和腐蚀,我们这一篇将利用膨胀和腐蚀操作实现对图像更高级的形态学操作,而这些都是建立在膨胀和腐蚀操作基础之上. 首先形态学的主要用途是获取物体拓扑和结果信息,它通过物体和 ...

最新文章

  1. html表单全选框,form表单里如何实现全选和全不选
  2. ncbi查找目的基因序列_基于PrimerBank和NCBI数据库的引物查找与设计
  3. SQL Try Catch
  4. GDataXML解析XML文档
  5. 数据库时间字段条件操作善用TO_DAYS函数等
  6. redhat6.4使用yum时提示需要注册问题
  7. 设置只能开启一个程序实例
  8. 本地上传文件到FastDFS命令上传报错:ERROR - file: connection_pool.c, line: 142, connect to server 192.168.0.197:221
  9. 磁盘启动次数计算原理总结
  10. 统计一个子字符串在另一个字符串中出现的次数
  11. JSP开发常用问题解决
  12. 消息队列技术终结者(三)—ActiveMQ的特性及优势
  13. vue读取本机的excel文件的两种方式
  14. Android视频编码的坑
  15. svn合并分支到主干,工具操作
  16. 极课大数据完成C轮融资,投资方为好未来
  17. Shiro学习01:使用Shiro实现身份管理和权限验证
  18. 背景与字体的搭配经验
  19. 想比较全面地学习 SAP XXX,能指导下从哪儿开始学习吗?
  20. 文件名称重命名后,一键恢复的技巧

热门文章

  1. internal/modules/cjs/loader.js:888 throw errError: Cannot find module ‘are-we-there-yet‘
  2. 员工电脑监控软件 iMonitor EAM 9.632 新版本上线啦!
  3. 加入区块链技术的在线赌博是否合法?
  4. SQL 中的 TRIM 函数
  5. 排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现
  6. AVCHD格式转换器的Mac适用于iOS
  7. Ubuntu双屏的副屏抖动闪烁
  8. 我不是风筝,别拉着我!
  9. 视频监控存储六方面 解开视频监控的存储秘密
  10. 著名的心理学及管理学效应全集(3)