linux内核工作队列

工作队列是Linux内核中处理小型任务的关键机制,它以进程上下文运行任务,实现并行和资源节省。文章介绍了工作队列的两种类型——系统共享和自定义工作队列的创建、添加、取消及清理过程,并详细讲解了alloc_workqueue()函数的使用和工作队列的各种属性标志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Workqueue 是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务 (work) 都不会自己起一个线程来处理,而是扔到 Workqueue 中处理。Workqueue 的主要工作就是用进程上下文来处理内核中大量的小任务。所以 Workqueue 的主要设计思想:一个是并行,多个 work 不要相互阻塞;另外一个是节省资源,多个 work 尽量共享资源 ( 进程、调度、内存 ),不要造成系统过多的资源浪费。为了实现的设计思想,workqueue 的设计实现也更新了很多版本。最新的 workqueue 实现叫做 CMWQ(Concurrency Managed Workqueue),也就是用更加智能的算法来实现“并行和节省”。新版本的 workqueue 创建函数改成 alloc_workqueue(),旧版本的函数 create_workqueue() 逐渐会被被废弃。

使用工作队列分成两种情况:一种是利用系统自有的共享工作队列;另一种是创建自定义的工作队列。
#系统共享的工作队列机制
	(1)定义一个工作处理函数,函数声明为:
		static void my_work_func(struct work_struct *work);
	(2)定义一个工作,并为其指定工作处理函数:(有两种类型的work,如下)
		/* ①定义普通的工作--work */
		struct work_struct my_work; 
		INIT_WORK(&my_work, my_work_func);
	
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值