使用多个goroutine的好处

问题描述 投票:-1回答:1

我已经看到了等待一组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()

更快吗?

go concurrency goroutine
1个回答
1
投票

需要清除的事情:您的两个示例都使用单个sync.WaitGroup,主要区别在于工作向sync.WaitGroup的“分配”。

在您的第一个示例中,您有2个并发goroutine执行2个不同的工作(任务),而在第2个示例中,您有1个单个goroutine依次执行两个任务,一个接一个。

主要好处可能是

可以安排2个goroutine在2个OS线程中运行,这些线程可能利用2个独立的CPU内核,因此可以更早/更快地完成。它是否更早完成以及完成多少取决于实际任务。

这两个任务甚至可能彼此depend

,因此,如果将它们放在一个goroutine中,它们将永远无法完成。
© www.soinside.com 2019 - 2024. All rights reserved.