news 2026/4/18 1:25:48

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/4/16 11:06:14

m4s-converter:全能解析B站缓存文件,无缝转换通用视频格式

m4s-converter&#xff1a;全能解析B站缓存文件&#xff0c;无缝转换通用视频格式 【免费下载链接】m4s-converter 将bilibili缓存的m4s转成mp4(读PC端缓存目录) 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 您是否遇到过这样的困扰&#xff1a;在B站缓…

作者头像 李华
网站建设 2026/4/18 8:48:32

图像去噪新选择:fft npainting lama修复细节表现优秀

图像去噪新选择&#xff1a;FFT NPainting LaMa修复细节表现优秀 1. 为什么传统图像修复总让人失望&#xff1f; 你有没有试过用那些标榜“智能修复”的工具&#xff0c;结果移除水印后边缘发虚、颜色断层&#xff0c;或者修掉电线后天空出现诡异的色块&#xff1f;不是模型不…

作者头像 李华
网站建设 2026/4/18 4:22:31

亲自动手试了FSMN-VAD,结果比预期还要准

亲自动手试了FSMN-VAD&#xff0c;结果比预期还要准 语音端点检测&#xff08;VAD&#xff09;听起来是个小功能&#xff0c;但实际用起来才发现——它几乎是所有语音AI应用的“守门人”。没有它&#xff0c;语音识别系统会把大量静音、咳嗽、翻页声甚至键盘敲击都当成有效输入…

作者头像 李华
网站建设 2026/4/17 15:25:52

4大维度!VADER情感分析从入门到实战的完整路径

4大维度&#xff01;VADER情感分析从入门到实战的完整路径 【免费下载链接】vaderSentiment VADER Sentiment Analysis. VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is specifically attuned to sent…

作者头像 李华
网站建设 2026/4/18 7:56:02

Ubuntu服务器重启后自动拉起服务?这个镜像帮你搞定

Ubuntu服务器重启后自动拉起服务&#xff1f;这个镜像帮你搞定 在实际运维中&#xff0c;我们常遇到这样的场景&#xff1a;服务器因断电、系统更新或意外故障重启后&#xff0c;关键业务服务没有自动恢复——用户访问失败、API调用超时、后台任务中断。手动登录、逐个启动服务…

作者头像 李华
网站建设 2026/4/18 8:51:59

3步解锁音乐自由:让加密音频彻底告别设备枷锁

3步解锁音乐自由&#xff1a;让加密音频彻底告别设备枷锁 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 当你精心收藏的音乐文件只能在特定应用中播放&#xff0c;当跨设备…

作者头像 李华