我看过等待一组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/

10-09 15:17