标签: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