golang-sync WaitGroup

WaitGroup

用途: 它能够等到所有goroutine执行完成,并 阻塞 主线程的执行,直到所有goroutine执行完成

在一个任务 依赖 其它多个任务的执行结果时, 并且其它任务是各自互不依赖,各自独立,就能最大发挥并行的优势, 此时主线程是阻塞的

WaitGroup方法

1.Add: 添加或者减少等待goroutine的数量

2.Done: 同 Add(-1)

3.Wait: 执行阻塞, 直到所有WaitGroup数量变成 0 

e.g.

package main
import (
   "fmt"
   "sync"
   "time"
)

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(n int) {
            defer wg.Add(-1)
            EchoNumber(n)
        }(i)
    }
    wg.Wait()
}

func EchoNumber(i int) {
    time.Sleep(3e9)
    fmt.Println(i)
}