基于go的生产者消费者模型
Posted jijiboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于go的生产者消费者模型相关的知识,希望对你有一定的参考价值。
基于go的生产者消费者模型
//生产者
func Producer(ch chan int) {
for i := 1; i <= 10; i++ {
ch <- i
}
close(ch)
}
//消费者
func Consumer(id int, ch chan int, done chan bool) {
for {
value, ok := <-ch
if ok {
fmt.Printf("id : %d consum %d value
", id, value)
} else {
fmt.Printf("id : %d had closed
", id)
break
}
}
done <- true
}
测试文件
const (
cur int = 2
)
func main() {
ch := make(chan int, 3)
done := make(chan bool, 1)
for i := 1; i <= 2; i++ {
go Consumer(i, ch, done)
}
go Producer(ch)
//注意这里,如果done channel里面没有true的化会一直阻塞直到有东西进来。
for i := 1; i <= cur; i++ {
<-done
}
}
以上是关于基于go的生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段