news 2026/2/25 13:10:27

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/2/25 2:42:34

一站式Steam模组下载工具:跨平台创意工坊资源获取解决方案

一站式Steam模组下载工具&#xff1a;跨平台创意工坊资源获取解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 在游戏模组爱好者的日常中&#xff0c;跨平台模组获取一直…

作者头像 李华
网站建设 2026/2/22 12:27:49

2.2 Docker底层原理深度剖析:UnionFS、镜像层、容器层三层架构详解

2.2 Docker底层原理深度剖析:UnionFS、镜像层、容器层三层架构详解 引言 Docker的镜像和容器基于Union File System(联合文件系统)实现。理解UnionFS的工作原理,特别是镜像层、容器层的三层架构,是掌握Docker的关键。本文将深入剖析Docker的底层存储机制。 一、Union F…

作者头像 李华
网站建设 2026/2/20 23:37:14

新手踩坑记录:Open-AutoGLM安装失败的解决方案

新手踩坑记录&#xff1a;Open-AutoGLM安装失败的解决方案 作为一款真正让手机“听懂人话、自己动手”的AI智能体框架&#xff0c;Open-AutoGLM&#xff08;即AutoGLM-Phone&#xff09;自开源以来就备受关注。它不依赖云端API调用&#xff0c;而是通过本地视觉理解智能规划ADB…

作者头像 李华
网站建设 2026/2/21 19:04:09

企业抽奖工具:提升活动互动效率的智能解决方案

企业抽奖工具&#xff1a;提升活动互动效率的智能解决方案 【免费下载链接】lucky-draw 年会抽奖程序 项目地址: https://gitcode.com/gh_mirrors/lu/lucky-draw 企业抽奖工具作为高效的活动互动系统&#xff0c;通过公平抽奖软件核心技术&#xff0c;为年会抽奖方案实施…

作者头像 李华
网站建设 2026/2/25 3:58:46

5个步骤掌握font-spider:实现字体压缩与网页性能优化

5个步骤掌握font-spider&#xff1a;实现字体压缩与网页性能优化 【免费下载链接】font-spider Smart webfont compression and format conversion tool 项目地址: https://gitcode.com/gh_mirrors/fo/font-spider 1_揭示核心矛盾_字体与性能的平衡难题 在现代网页开发…

作者头像 李华
网站建设 2026/2/25 1:33:47

GRETNA实战指南:从入门到精通的4大核心技能

GRETNA实战指南&#xff1a;从入门到精通的4大核心技能 【免费下载链接】GRETNA A Graph-theoretical Network Analysis Toolkit in MATLAB 项目地址: https://gitcode.com/gh_mirrors/gr/GRETNA GRETNA作为MATLAB环境下的脑网络分析工具&#xff0c;为神经影像研究者提…

作者头像 李华