加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux 工作队列 workqueue 是什么鬼呀?

发布时间:2022-01-14 10:36:57 所属栏目:Linux 来源:互联网
导读:工作队列是Linux操作系统中,进行中断下半部分处理的重要方式! 从名称上可以猜到:一个工作队列就好像业务层常用的消息队列一样,里面存放着很多的工作项等待着被处理。 工作队列中有两个重要的结构体:工作队列(workqueue_struct) 和 工作项(work_struct)
   工作队列是Linux操作系统中,进行中断下半部分处理的重要方式!
 
   从名称上可以猜到:一个工作队列就好像业务层常用的消息队列一样,里面存放着很多的工作项等待着被处理。
 
   工作队列中有两个重要的结构体:工作队列(workqueue_struct) 和 工作项(work_struct):在内核中,工作队列中的所有工作项,是通过链表串在一起的,并且等待着操作系统中的某个线程挨个取出来处理。
 
这些线程,可以是由驱动程序通过 kthread_create 创建的线程,也可以是由操作系统预先就创建好的线程。
 
这里就涉及到一个取舍的问题了。如果我们的处理函数很简单,那么就没有必要创建一个单独的线程来处理了。
 
原因有二: 创建一个内核线程是很耗费资源的,如果函数很简单,很快执行结束之后再关闭线程,太划不来了,得不偿失;
  如果每一个驱动程序编写者都毫无节制地创建内核线程,那么内核中将会存在大量不必要的线程,当然了本质上还是系统资源消耗和执行效率的问题;
为了避免这种情况,于是操作系统就为我们预先创建好一些工作队列和内核线程。
 
我们只需要把需要处理的工作项,直接添加到这些预先创建好的工作队列中就可以了,它们就会被相应的内核线程取出来处理。

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读