【发布时间】:2020-03-20 12:42:15
【问题描述】:
我见过等待一组 goroutine 完成的代码:
var wg sync.WaitGroup
wg.Add(2)
go func() {
// Do work.
wg.Done()
}()
go func() {
// Do some other work.
wg.Done()
}()
wg.Wait()
这样做的主要好处是什么,而不是让我们说:
var wg sync.WaitGroup
wg.Add(1)
go func() {
// Do work.
// Do some more work here instead.
wg.Done()
}()
wg.Wait()
更快吗?
【问题讨论】:
-
两个示例都使用单个等待组。不同的是,在第一个示例中,两个任务同时运行,而在第二个任务中,它们串联运行。哪个是正确的或“有益的”,显然取决于所做工作的性质。
-
第二个例子不使用并发;您可以删除
WaitGroup和go,它的运行方式相同。 -
@Adrian 谢谢 - 所以如果我想拆分“工作量”,如果我要执行三个函数,我会使用三个 goroutine 并更改为
wg.Add(3).. 吗?
标签: go concurrency goroutine