在并发编程中生产者消费者模式模式可以解决大多数并发问题。该模式通过一个阻塞队列来平衡生产者和消费者之间的工作能力,以提高整体的处理速度。Go语言作为一种原生支持高并发的语言,经常使用生产者和消费者模式。
需要说明的是: 生产者和消费者模式并没有被列入GoF的23种OOP(面向对象编程)的设计模式, 是因为该模式并不是一种OOP的设计模式,而是一种面向过程的设计模式。
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int)
defer close(ch)
// consumer
for i := 0; i < 10; i++ {
go func() {
num := <- ch
fmt.Println(num)
}()
}
// product
for i := 0; i < 10; i++ {
go func(num int) {
ch <- num
fmt.Println(num)
}(i)
}
time.Sleep(1 * time.Second)
}
5
0
6
7
8
9
2
1
3
4
如果生产者这样写:
for i := 0; i < 10; i++ {
go func() {
ch <- i
}
}
就会形成闭包,结果为:
10
10
10
10
10
10
10
10
10
10
网友评论