我看过等待一组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()
它更快吗?
最佳答案
需要清除的事情:您的两个示例都使用了一个 sync.WaitGroup
,主要区别是将工作“分配”到goroutines。
在第一个示例中,您有2个并发goroutines来执行2个不同的工作(任务),而在第二个示例中,您有1个单个goroutine依次执行两个任务,一个接一个地执行。
主要好处可能是可以将2个goroutine安排为在2个OS线程中运行,这些线程可以利用2个独立的CPU内核,因此可以更早/更快地完成。它是否会更早完成以及完成多少取决于实际任务。
这两个任务甚至可能相互依赖,因此,如果将它们放在单个goroutine中,它们将永远无法完成。
关于go - 使用多个goroutine的好处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60774386/