news 2026/3/1 20:18:29

1.14 生产者消费者模式实战:用Go实现高并发消息队列系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.14 生产者消费者模式实战:用Go实现高并发消息队列系统

1.14 生产者消费者模式实战:用Go实现高并发消息队列系统

引言

生产者消费者模式是并发编程中的经典模式,在Go语言中通过channel可以优雅地实现。本文将手把手教你实现一个高并发的消息队列系统,涵盖生产者、消费者、任务分发等核心功能。

一、基础生产者消费者

1.1 简单实现

packagemainimport("fmt""time")funcproducer(chchan<-int){fori:=0;i<10;i++{fmt.Printf("生产: %d\n",i)ch<-i time.Sleep(100*time.Millisecond)}close(ch)}funcconsumer(ch<-chanint,idint){forvalue:=rangech{fmt.Printf("消费者%d消费: %d\n",id,value)time.Sleep(200*time.Millisecond)}}funcmain(){ch:=make(chanint,5)goproducer(ch)// 多个消费者fori:=1;i<=3;i++{goconsumer(ch,i)}time.Sleep(5*time.Second)}

二、任务队列系统

2.1 任务定义

packagemainimport("fmt""time")typeTaskstruct{IDintDatastringResultchanstring}typeTaskQueuestruct{taskschanTask workersint}funcNewTaskQueue(workersint,queueSizeint)*TaskQueue{return&TaskQueue{tasks:make(chanTask,queueSize),workers:workers,}}func(tq*TaskQueue)Start(){fori:=0;i<tq.workers;i++{gotq.worker(i)}}func(tq*TaskQueue)worker(idint){fortask:=rangetq.tasks{fmt.Printf("Worker %d 处理任务 %d: %s\n",id,task.ID,task.Data)// 模拟处理时间time.Sleep(500*time.Millisecond)// 返回结果task.Result<-fmt.Sprintf("任务 %d 完成",task.ID)}}func(tq*TaskQueue)Submit(task Task){tq.tasks<-task}func(tq*TaskQueue)Close(){close(tq.tasks)}funcmain(){queue:=NewTaskQueue(3,10)queue.Start()// 提交任务fori:=1;i<=10;i++{resultCh:=make(chanstring,1)task:=Task{ID:i,Data:fmt.Sprintf("数据%d",i),Result:resultCh,}queue.Submit(task)// 异步获取结果gofunc(idint,ch<-chanstring){result:=<-ch fmt.Printf("任务 %d 结果: %s\n",id
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/1 16:42:44

笔记本散热工具:三步解决风扇噪音问题,让电脑安静如猫

笔记本散热工具&#xff1a;三步解决风扇噪音问题&#xff0c;让电脑安静如猫 【免费下载链接】nbfc NoteBook FanControl 项目地址: https://gitcode.com/gh_mirrors/nb/nbfc 还在为笔记本风扇突然狂转的噪音烦恼吗&#xff1f;这款神奇的笔记本散热工具能帮你解决风扇…

作者头像 李华
网站建设 2026/2/26 3:48:53

想自己训练OCR模型?这个镜像支持数据微调一气呵成

想自己训练OCR模型&#xff1f;这个镜像支持数据微调一气呵成 你是否遇到过这些情况&#xff1a; 现成的OCR工具在特定场景下识别率低&#xff0c;比如工业仪表盘、古籍扫描件、手写单据&#xff1b;想用自定义数据提升检测精度&#xff0c;但被繁杂的环境配置、数据格式转换…

作者头像 李华
网站建设 2026/2/11 6:35:40

歌词数据获取新方案:LyricsGenius如何重塑音乐信息提取流程

歌词数据获取新方案&#xff1a;LyricsGenius如何重塑音乐信息提取流程 【免费下载链接】LyricsGenius Download song lyrics and metadata from Genius.com &#x1f3b6;&#x1f3a4; 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsGenius 在数字化音乐蓬勃发展…

作者头像 李华
网站建设 2026/2/28 21:25:41

从部署到测试,完整走通FSMN-VAD语音检测流程

从部署到测试&#xff0c;完整走通FSMN-VAD语音检测流程 语音端点检测&#xff08;VAD&#xff09;是语音处理流水线中看似低调却极为关键的一环。你是否遇到过这样的问题&#xff1a;一段10分钟的会议录音&#xff0c;真正说话的内容可能只有3分钟&#xff0c;其余全是环境噪…

作者头像 李华
网站建设 2026/3/1 18:13:56

1.13 Go HTTP服务器性能优化:连接池、超时控制、优雅关闭实战技巧

1.13 Go HTTP服务器性能优化:连接池、超时控制、优雅关闭实战技巧 引言 生产环境的HTTP服务器需要高性能和高可用性。本文将深入讲解连接池、超时控制、优雅关闭等性能优化技巧,帮助你构建高性能的HTTP服务器。 一、HTTP客户端连接池 1.1 默认HTTP客户端的问题 package …

作者头像 李华
网站建设 2026/2/27 0:17:27

开箱即用!基于UNet的图像抠图镜像快速入门指南

开箱即用&#xff01;基于UNet的图像抠图镜像快速入门指南 1. 为什么你今天就能用上专业级抠图工具 你有没有过这样的经历&#xff1a;为了给一张人像换背景&#xff0c;在Photoshop里花半小时调边缘、修毛发&#xff0c;结果还是有白边&#xff1b;或者要处理几十张电商产品…

作者头像 李华