Преимущество использования нескольких горутин - PullRequest
0 голосов
/ 20 марта 2020

Я видел код, который ждет, пока группа goroutines завершит sh:

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()

Это быстрее?

1 Ответ

3 голосов
/ 20 марта 2020

Некоторые вещи, которые нужно прояснить: оба ваших примера используют один sync.WaitGroup, основное отличие заключается в «распределении» работы по функциям .

In В первом примере у вас есть 2 одновременных программы, выполняющих 2 разные работы (задачи), в то время как во 2 примере у вас есть 1 отдельная программа, выполняющая обе задачи последовательно, одна за другой.

Основным преимуществом может быть что эти 2 подпрограммы могут быть запланированы для запуска в 2 потоках ОС, которые могут использовать 2 отдельных ядра ЦП, поэтому они могут завершиться раньше / раньше. Завершится ли это раньше и насколько зависит от реальных задач.

Эти 2 задачи могут даже зависеть друг от друга, поэтому может случиться так, что если вы поместите их в одну программу они никогда не завершатся.

...