开发者社区 问答 正文

工作队列是什么?

工作队列是什么?

展开
收起
请回答1024 2020-03-26 21:37:08 824 分享 版权
1 条回答
写回答
取消 提交回答
  • 在一个操作系统中,如果我们需要进行一项工作处理,往往需要创建一个任务来加入内核的调度队列。一个任务对应一个处理函数,如果要进行不同的事务处理,则需要创建多个不同的任务。任务作为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"

    2020-03-26 21:37:23
    赞同 展开评论
问答地址: