多生产者关闭 Goroutine
在本篇文章中,将介绍如何在多个生产者完成生产后关闭 goroutine.
在编程中,我们会遇到多个生产者,单一消费者的场景。
在这种情况下,工作流会分为了两个 stage:
- Stage 1: 多个生产者并发地计算结果,并将结果传入 channel
- Stage 2: 消费者从 channel 中读取结果,做下一步的计算
在两个 stage 完成工作后程序自然退出,因此需要在所有生产者完成工作后,关闭 channel。消费者在 channel 关闭后,结束运行并退出。
为了保证所有生产者,使用 sync.WaitGroup.
示例代码:
1 |
|
首先是 stage1,启动多个 Goroutine,通过闭包将 wg 传入,并且在完成任务后调用 wg.Done()。
然后启动另一个 Goroutine 用来关闭 channel,这个 Goroutine 会阻塞,直到所有的任务完成,最后关闭 channel。
最后就是 stage2,不停地从 channel 中读取数据,直到 channel 关闭,然后结束程序。
这样就完成了一个多生产者场景下 channel 关闭的问题了。
多生产者关闭 Goroutine
https://blog.zhangliangliang.cc/post/close-goroutines.html