Go 并发模式与反射机制详解
1. 生产者与消费者模式
在 Go 语言中,通道(Channels)能够轻松处理多消费者从单生产者接收数据,或单消费者从多生产者接收数据的场景。
1.1 单生产者与单消费者
这种情况较为简单,示例代码如下:
func main() { // one producer var ch = make(chan int) go func() { for i := 0; i < 100; i++ { ch <- i } close(ch) }() // one consumer var done = make(chan struct{}) go func() { for i := range ch { fmt.Println(i) } close(done) }() <-done }完整示例: https://play.golang.org/p/hNgehu62kjv
1.2 多生产者(N * 1)
多个生产者可以使用sync.WaitGroup来处理,所有的 goroutine 共享同一个通道。示例代码如下: