标签:func import imp 并发 取数 ann ons WaitGroup 序号
要求:有一个生产者,可以依次生产[0, 100)这100个数字,有5个消费者进行消费,消费者是并发的。
package main
import (
"fmt"
"sync"
"time"
)
func main() {
wg := sync.WaitGroup{}
wg.Add(20)
c := make(chan int, 20)
for i := 1; i <= 5; i ++ {
//注意要传&wg
go consumer(i, c, &wg)
}
producer(c)
//等待协程全部结束,wg归0即可退出
wg.Wait()
}
func producer(c chan int) {
for i := 0; i < 20; i ++ {
c <- i
}
//记得关闭管道
close(c)
}
func consumer(consumerSeq int, c chan int, wg *sync.WaitGroup) {
for num := range c { //从channel中读取数据,channel关闭后循环结束,channel为空时阻塞
fmt.Println("消费者序号:", consumerSeq, num)
//模拟消费者在消费后进行的逻辑处理,否则打印函数耗时很短,可能一个消费者就全都消费完了
time.Sleep(1 * time.Millisecond)
//释放一个WaitGroup
wg.Done()
}
}
标签:func import imp 并发 取数 ann ons WaitGroup 序号
原文地址:https://www.cnblogs.com/huo72020/p/13674566.html