Ctx

go ctx

December 18, 2020
Go
Ctx

ctx #

1.why

goroutine号称百万之众,互相之间盘根错节,难以管理控制。为此,必须提供一种机制来管理控制它们。

各自为战 #

package main

import (
    "fmt"
    "time"
)

func main() {
    // start first
    go func() {
        fmt.Println(1)
    }()

    // start second
    go func() {
        fmt.Println(2)
    }()

    time.Sleep(time.Second)
}

万法归一 #

package main

import (
    "fmt"
    "sync"
)

func main() {
    wg := new(sync.WaitGroup)

    // start first
    wg.Add(1)
    go func() {
        defer wg.Done()
        fmt.Println(1)
    }()

    // start second
    wg.Add(1)
    go func() {
        defer wg.Done()
        fmt.Println(2)
    }()

    wg.Wait()
}

可以看到使用waitgroup可以控制多个goroutine必须互相等待,直到最后一个完成才会全部完成。

...