生产者消费者模式实战:用Go实现高并发消息队列系统
引言
生产者-消费者模式是并发编程中的经典设计模式,广泛应用于消息队列、任务调度、数据管道等场景。本文将深入讲解生产者-消费者模式的原理,并用 Go 语言实现一个完整的高并发消息队列系统,让你彻底掌握这一重要模式。
一、生产者-消费者模式基础
1.1 模式概述
核心概念:
- 生产者(Producer):产生数据/任务的组件
- 消费者(Consumer):处理数据/任务的组件
- 缓冲区(Buffer):连接生产者和消费者的中间存储
1.2 模式优势
| 优势 | 说明 |
|---|---|
| 解耦 | 生产者和消费者互不依赖 |
| 缓冲 | 平衡生产和消费速度差异 |
| 并发 | 提高系统吞吐量 |
| 扩展 | 易于增加生产者和消费者 |
二、基础实现
2.1 最简单的生产者-消费者
packagemainimport("fmt""time")funcmain(){// 创建 Channel 作为缓冲区ch:=make(chanint,5)// 生产者gofunc(){fori:=0;i<10;i++{ch<-i fmt.Printf("生产: %d\n",i)time.Sleep(100*time.Millisecond)}close(ch)// 关闭 Channel,通知消费者结束}()// 消费者forvalue:=rangech{fmt.Printf("消费: %d\n",value)time.Sleep(200*time.Millisecond)}fmt.Println("完成")}2.2 多个生产者和消费者
packagemainimport("fmt""sync""time")funcmain(){ch:=make(chanint,10)varwg sync.WaitGroup// 多个生产者numProducers:=3fori:=0;i<numProducers;i