news 2026/6/25 17:36:26

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/6/18 0:40:21

2.4 Dockerfile编写实战:从零开始构建生产级容器镜像

Dockerfile编写实战:从零开始构建生产级容器镜像 引言 Dockerfile 是构建 Docker 镜像的蓝图,掌握 Dockerfile 编写是容器化的核心技能。本文将深入讲解 Dockerfile 的语法和最佳实践,通过实战案例带你从零开始构建生产级的容器镜像。 一、Dockerfile 基础 1.1 什么是 D…

作者头像 李华
网站建设 2026/6/15 6:28:01

AI 写论文哪个软件最好?虎贲等考 AI:击穿毕业论文核心痛点的闭环利器

毕业季来临&#xff0c;“AI 写论文哪个软件最好” 成了毕业生的高频灵魂拷问。有人试遍通用 AI 却栽在文献虚构、逻辑松散&#xff0c;有人依赖专业工具却被操作门槛、功能割裂劝退&#xff0c;有人在多平台切换中打断思路&#xff0c;最终把论文写作熬成一场耗时耗力的 “渡劫…

作者头像 李华
网站建设 2026/6/23 1:27:22

掌控串口调试:SSCom跨平台工具从入门到精通指南

掌控串口调试&#xff1a;SSCom跨平台工具从入门到精通指南 【免费下载链接】sscom Linux/Mac版本 串口调试助手 项目地址: https://gitcode.com/gh_mirrors/ss/sscom SSCom作为一款专为Linux和Mac系统打造的开源串口调试助手&#xff0c;凭借其轻量设计与强大功能&…

作者头像 李华
网站建设 2026/6/15 12:59:44

3个Java性能优化技术实现系统响应速度提升50%

3个Java性能优化技术实现系统响应速度提升50% 【免费下载链接】Flashtool Xperia device flashing 项目地址: https://gitcode.com/gh_mirrors/fl/Flashtool 一、问题诊断&#xff1a;识别Java应用性能瓶颈 在企业级Java应用开发中&#xff0c;性能问题往往隐蔽且复杂。…

作者头像 李华
网站建设 2026/6/19 20:21:38

Ring-mini-2.0:1.4B激活参数实现7-8B级推理新体验

Ring-mini-2.0&#xff1a;1.4B激活参数实现7-8B级推理新体验 【免费下载链接】Ring-mini-2.0 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ring-mini-2.0 导语&#xff1a;inclusionAI最新发布的Ring-mini-2.0模型以16B总参数和仅1.4B激活参数的高效设计…

作者头像 李华
网站建设 2026/6/24 10:45:41

3个秘诀终结Windows热键冲突:高效定位快捷键占用问题全指南

3个秘诀终结Windows热键冲突&#xff1a;高效定位快捷键占用问题全指南 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否经历过这些抓狂瞬间…

作者头像 李华