Linux 工作队列和等待队列的区别

转载 2013年12月05日 15:04:22
work queue是一种bottom half,中断处理的后半程,强调的是动态的概念,即work是重点,而queue是其次。

wait queue是一种「任务队列」,可以把一些进程放在上面睡眠等待某个事件,强调静态多一些,重点在queue上,即它就是一个queue,这个queue如何调度,什么时候调度并不重要。

对这2个容易混淆的队列做简单概念上的区别,怎么用?

 

等待队列在内核中有很多用途,尤其适合用于中断处理,进程同步及定时。我们在这里只说,

进程经常必须等待某些事件的发生。例如,等待一个磁盘操作的终止,等待释放系统资源,或者

等待时间经过固定的间隔。

 

等待队列实现了在事件上的条件等待,希望等待特定事件的进程把自己放进合适的等待队列,并

放弃控制权。因此。等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。

 

等待队列由循环链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头,

等待队列头是一个类型为wait_queue_head_t的数据结构。

 

等待队列链表的每个元素代表一个睡眠进程,该进程等待某一事件的发生,它的描述符地址存放在

task字段中

 

然而,要唤醒等待队列中所有的进程有时并不方便。例如,如果两个或多个进程在等待互斥访问某

一个要释放的资源,仅唤醒等待队列中一个才有意义。这个进程占有资源,而其他进程继续睡眠

 

可以用DECLARE_WAIT_QUEUE_HEAD(name)宏定义一个新的等待队列,该宏静态地声明和初始化名为

name的等待队列头变量。 init_waitqueue_head()函数用于初始化已动态分配的wait queue head变量

 

等待队列可以通过DECLARE_WAITQUEUE()静态创建,也可以用init_waitqueue_head()动态创建。进程把

自己放入等待队列并设置成不可执行状态。

 

 

工作队列,workqueue,它允许内核代码来请求在将来某个时间调用一个函数。用来处理不是很紧急事件

的回调方式处理方法.

工作队列的作用就是把工作推后,交由一个内核线程去执行,更直接的说就是如果您写了一个函数,而您

现在不想马上执行它,您想在将来某个时刻去执行它,那您用工作队列准没错

 

如果需要用一个可以重新调度的实体来执行你的下半部处理,也应该使用工作队列。它是唯一能在进程上

下文运行的下半部实现的机制,也只有它才可以睡眠。这意味着在需要获得大量的内存时、在需要获取信

号量时,在需要执行阻塞式的I/O操作时,它都会非常有用


相关文章推荐

V4L2常用命令详解

参考链接:http://blog.chinaunix.net/uid-26851094-id-3356224.html首先在学习v4l2之前,你得起码先有个摄像头,不然没得玩另外,最好给自己指定一个计...

android 5.0 Camera 之 ZSL说明

ZSL的概念 ZSL (zero shutter lag) 中文名称为零延时拍照,是为了减少拍照延时,让拍照&回显瞬间完成的一种技术。 Single Shot 当开始预览后,sensor 和 V...

高通camera架构讲解

转自:http://www.cnblogs.com/thjfk/p/4086001.html   Camera原理:外部光线穿过lens后,经过color filter滤波后照射到sensor面上,s...

Android之Camera预览

一、命令流程 1.APP packages/apps/Camera/src/com/android/camera/PhotoModule.java private void star...

【转】 camera sensor readout position(flip/mirror)

预览过程:景物(sence)通过镜头(lens)生成的光学图像投射到图像传感器(sensor)上, 图像以pixel为单位通过MIPI/DVP接口传输到VFE,经过external memory,最后...

基于qualcomm平台的camera 驱动详解

前言: 一、Android camera架构 在framework中,camera主要是通过以下库来协同工作的: libandroid_runtime.so、libui.so、libcameraser...

linux内核中断底半部

1、内核中断处理如果CPU接收到一个中断,它会停止一切工作,调用中断处理函数,因为进程调度依赖中断,此时进程调度也会停止,所以就要求我们的中断处理一定要快。 使用中断时,需要注意: 不能使用导致睡...

可能是最鸡汤的面经

我是通信学院某网络实验室默默无闻的水硕一枚,本科打了四年游戏,除了魔兽成就之外毫无可装逼的地方。还记得考研面试的时候导师问我本科有什么地方做得比较好,我羞羞的说了句“C语言期末考91分算不算”……之后...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)