news 2026/6/10 16:43:09

52.延迟工作队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
52.延迟工作队列

延迟工作队列可以对原有的共享工作队列和自定义工作队列,加上定时器进一步封装,再进入中断程序的下半部分进行延迟进入。

直接延迟:「先占队列,再等延迟」→ 霸占公共资源;
delayed_work:「先等延迟,再占队列执行」→ 仅占用执行逻辑的必要时间,不浪费公共资源。

这是比在直接在中断下半段延迟的好处

驱动函数

#include <linux/module.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/gpio.h> #include <linux/delay.h> #include <linux/workqueue.h> int irq; struct workqueue_struct *test_workqueue; struct delayed_work test_workqueue_work; // 工作项处理函数 void test_work(struct work_struct *work) { msleep(1000); printk("This is test_work\n"); } // 中断处理函数 irqreturn_t test_interrupt(int irq, void *args) { printk("This is test_interrupt\n"); // 提交延迟工作项到自定义工作队列 queue_delayed_work(test_workqueue, &test_workqueue_work, 3 * HZ); return IRQ_RETVAL(IRQ_HANDLED); } static int interrupt_irq_init(void) { int ret; irq = gpio_to_irq(101); // 将GPIO映射为中断号 printk("irq is %d\n", irq); // 请求中断 ret = request_irq(irq, test_interrupt, IRQF_TRIGGER_RISING, "test", NULL); if (ret < 0) { printk("request_irq is error\n"); return -1; } // 创建工作队列 test_workqueue = create_workqueue("test_workqueue"); // 初始化延迟工作项 INIT_DELAYED_WORK(&test_workqueue_work, test_work); return 0; } static void interrupt_irq_exit(void) { free_irq(irq, NULL); // 释放中断 cancel_delayed_work_sync(&test_workqueue_work); // 取消延迟工作项 flush_workqueue(test_workqueue); // 刷新工作队列 destroy_workqueue(test_workqueue); // 销毁工作队列 printk("bye bye\n"); } module_init(interrupt_irq_init); module_exit(interrupt_irq_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("quan");

Makfile

obj-m += delay_workqueue.o KDIR:=/home/linux/samba-mount/linux-kernel/linux-6.17.5 PWD?=$(shell pwd) all: make -C $(KDIR) M=$(PWD) modules echo $(PWD) clean: rm -rf *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order install: cp *.ko ../../linux-kernel/linux-6.17.5/kmodules

编译及开发板验证测试

由此可以看到延迟了4秒钟,包括进入下半段和下半段延迟。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 0:53:36

LangChain RAG-递归文档树检索实施高级RAG优化理解

01. RAPTOR 递归文档树策略 在传统的 RAG 中&#xff0c;我们通常依靠检索短的连续文本块来进行检索。但是&#xff0c;当我们处理的是长上下文时&#xff0c;我们就不能仅仅将文档分块嵌入到其中&#xff0c;或者仅仅使用上下文填充所有文档。相反&#xff0c;我们希望为 LLM…

作者头像 李华
网站建设 2026/6/10 14:08:42

MySQL数据库迁移脚本及使用说明

脚本源码 #!/bin/bash# 数据库迁移脚本 - 导出MySQL数据库并导入到新机器 # 支持可配置的数据库列表和目标服务器IP地址# 默认配置 SOURCE_HOST"127.0.0.1" SOURCE_USER"user" SOURCE_PASS"password" TARGET_HOST"127.0.0.1" TARGET_…

作者头像 李华
网站建设 2026/6/10 5:35:30

什么是GPU

现代机器学习GPU&#xff08;例如H100、B200&#xff09;基本上是由多个专门用于矩阵乘法的计算核心&#xff08;称为流式多处理器或SM&#xff09;连接到一块高速内存条&#xff08;称为HBM&#xff09;组成。下图所示&#xff1a; 图&#xff1a; H100 或 B200 GPU 的抽象布…

作者头像 李华
网站建设 2026/6/10 12:34:26

2025免费降AI率完全指南:从降AI工具选择到实操技巧,一步到位!

在论文、报告、内容创作越来越严格的时代&#xff0c;查AI率、检测AI率、降AI率 已经成为学生、写作者、博主的日常需求。很多同学因为 AI率过高被导师指出“AI痕迹太重”&#xff0c;甚至退回重写。本文今天一次性告诉你&#xff1a; 检测AI率应该注意什么 免费查AI率的网站有…

作者头像 李华