go ctx
December 18, 2020
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
必须互相等待,直到最后一个完成才会全部完成。