您好、欢迎来到现金彩票网!
当前位置:9号彩票app下载 > 工作队列 >

linux kernel工作队列及源码详细讲解

发布时间:2019-04-25 01:47 来源:未知 编辑:admin

  (workqueue)的Linux内核中的定义的用来处理不是很紧急事件的回调方式处理方法.

  kernel/workqueue.c中定义了一个工作队列链表, 所有工作队列可以挂接到这个链表中:

  在workqueue的初始化函数中, 定义了一个针对内核中所有线程可用的事件工作队列, 其他内核线程建立的事件工作结构就都挂接到该队列:

  // 降低进程优先级, 工作进程不是个很紧急的进程,不和其他进程抢占CPU,通常在系统空闲时运行

  // 设置more_work等待队列, 当有新work结构链入队列中时会激发此等待队列

  // 现在在执行以下代码时可以中断,run_workqueue本身可能会重新被调用, 所以要判断递归深度

  在大多数情况下, 并不需要自己建立工作队列,而是只定义工作, 将工作结构挂接到内核预定义的事件工作队列中调度, 在kernel/workqueue.c中定义了一个静态全局量的工作队列keventd_wq:

  // 在其他函数中使用以下函数来调度工作结构, 是把工作结构挂接到工作队列中进行调度

  // 工作结构还没在队列, 设置pending标志表示把工作结构挂接到队列中

  // 工作结构还没在队列, 设置pending标志表示把工作结构挂接到队列中

  工作队列和定时器函数处理有点类似, 都是执行一定的回调函数, 但和定时器处理函数不同的是定时器回调函数只执行一次, 而且执行定时器回调函数的时候是在时钟中断中, 限制比较多, 因此回调程序不能太复杂; 而工作队列是通过内核线程实现, 一直有效, 可重复执行, 由于执行时降低了线程的优先级, 执行时可能休眠, 因此工作队列处理的应该是那些不是很紧急的任务, 如垃圾回收处理等, 通常在系统空闲时执行,在xfrm库中就广泛使用了workqueue,使用时,只需要定义work结构,然后调用schedule_(delayed_)work即可。

http://dralvaro.com/gongzuoduilie/29.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有