美文网首页
工作队列

工作队列

作者: 傀儡世界 | 来源:发表于2020-05-18 15:44 被阅读0次

用例程解释create_singlethread_workqueue与create_workqueue的区别

什么是workqueue
Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程.

工作队列(workqueue)是另外一种将工作推后执行的形式.工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。最重要的就是工作队列允许被重新调度甚至是睡眠。

使用create_singlethread_workqueue创建工作队列即使对于多CPU系统,内核也只负责在一个cpu上创建一个worker_thread内核线程;而使用create_workqueue创建工作队列对于多CPU系统,内核将会在每个CPU上创建一个worker_thread内核线程,使得线程处理的事务能够并行化.

//工作以队列结构组织成工作队列(workqueue),其数据结构为workqueue_struct,
static struct workqueue_struct *test_wq = NULL;

//把推后执行的任务叫做工作(work),描述它的数据结构为work_struct
static struct work_struct work;

/创建工作队列workqueue_struct,该函数会为cpu创建内核线程/
test_wq = create_singlethread_workqueue("test_wq"); / test_wq = create_workqueue("test_wq");
/初始化工作work_struct,指定工作函数/
INIT_WORK(&work,work_func);
/将工作加入到工作队列中,最终唤醒内核线程/
queue_work(test_wq, &work);

共享工作队列
共享队列,就是系统创建了默认的workqueue,只需要定义初始化work,调用接口就完成。
两个接口:
bool schedule_work(struct work_struct *work);
bool schedule_delayed_work(struct delayed_work *dwork,
unsigned long delay);

相关文章

  • RabbitMQ-工作队列

    work queues 工作队列 轮询分发 为什么会出现工作队列simple队列 是一一对应的,实际开发中,...

  • 工作队列

  • 工作队列

    用例程解释create_singlethread_workqueue与create_workqueue的区别 什么...

  • GCD之Dispatch Queue

    要添加工作到队列Dispatch Queue中,这个队列可以是串行或者并行的,并行队列会尽可能的并发执行其中的工作...

  • 每天一点Swift(七)GCD

    1.在其他队列里面执行函数 2.主队列更新UI,其他队列做耗时工作 3. 创建并行队列 4.创建串行队列 5.延迟

  • Rabbit笔记1-Work Queues(Task Queue

    Spring AMQP API文档 Work Queues(Task Queues)简介 工作队列(任务队列)的主...

  • 利用Redis做消息队列实现生产消费和发布订阅

    在工作中,我们经常会使用队列,在Python中也有原生队列,但是原生的队列是存储在内存中,当重启系统后队列中的数据...

  • 【行为型模式十七】命令模式-2(Command)

    3.5 队列请求## 所谓队列请求,就是对命令对象进行排队,组成工作队列,然后依次取出命令对象来执行。多用多线程或...

  • 5 工作队列

    1 图解 2 代码 3 代码介绍 3.1 引入必须依赖 3.2 获取MQ连接 3.3 消息消费者1 3.4 消息消...

  • RabbitMQ 工作队列

    每日一句 如果你执意追逐我的幻影,迟早会被真正的我打败。 https://www.ylcoder.top/post...

网友评论

      本文标题:工作队列

      本文链接:https://www.haomeiwen.com/subject/jmvoghtx.html