工作队列是什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在一个操作系统中,如果我们需要进行一项工作处理,往往需要创建一个任务来加入内核的调度队列。一个任务对应一个处理函数,如果要进行不同的事务处理,则需要创建多个不同的任务。任务作为cpu调度的基础单元,任务数量越大,则调度成本越高。工作队列(workqueue)机制简化了基本的任务创建和处理机制,一个workqueue对应一个实体task任务处理,workqueue下面可以挂接多个work实体。
当某些实时性要求较高的任务中,需要进行较繁重钩子处理时,可以将其处理函数挂接在workqueue中,其执行过程将位于workqueue的上下文,而不会占用原有任务的处理资源。workqueue还提供了work的延时处理机制,用户可以选择立即执行或是延时处理。
由此可见,我们在需要创建大量实时性要求不高的任务时,可以使用workqueue来统一调度;或者将任务中实时性要求不高的部分处理延后到workqueue中处理。如果需要设置延后处理,则需要使用work机制。另外该机制不支持周期work的处理。
工作队列功能的相关源码位于/kernel/rhino/目录中。(v2.1.0之前位于/kernel/rhino/core/目录中)。
头文件内容包含如下:
#include <aos/aos.h> #include <aos/kernel.h> #include "k_workqueue.h"