工作队列 workqueue

工作队列是Linux内核实现延后任务的一种机制,用于避免过多的内核线程导致的性能影响。它包括workqueue_struct结构和work_struct工作元素。初始化work_struct后,可以将其提交到工作队列,由worker_thread内核线程执行。工作队列的创建和销毁以及工作元素的提交是其核心操作。
摘要由CSDN通过智能技术生成

工作队列是内核用于进行延后工作的一种方式。当然驱动模块中使用之前提到的kernel thread就可以完成延后工作了,但是如果每个驱动模块都创建自己的kernel thread,那么内核线程数量过多,这会影响整体的性能。因此,最好的方法就是把这些需求汇集起来,提供一个统一的机制,也就是workqueue了。

它的结构是workqueue_struct;

和工作队列息息相关的是工作元素work_struct,毕竟队列只是一个容器罢了,光有队列是不能干什么活的,它定义在kernel-4.9/include/linux/workqueue.h

struct work_struct {
	atomic_long_t data;
	struct list_head entry;
	work_func_t func;
#ifdef CONFIG_LOCKDEP
	struct lockdep_map lockdep_map;
#endif
};

work_struct的初始化,定义在kernel-4.9/include/linux/workqueue.h中;这个方法的用途是将对应的work_struct变量和函数地址建立联系。

#define INIT_WORK(_work, _func)						\
	__INIT_WORK((_work), (_func), 0)

这里有一个比较奇怪的地方,因为一些资料里面提到的INIT_WORK方法有第三个参数data,然而在kerenl-4.9下的并没有,于是再查看一了下kernel-3.18的代码;

#define IN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值