golang 控制並發有兩種經典方式:WaitGroup 和 Context


 

Golang控制並發有兩種經典的方式,一種是WaitGroup,另外一種就是Context。

 

WaitGroup 方式:

var wg sync.WaitGroup

func fun1(i chan int) {
time.Sleep(2 * time.Second)
fmt.Println(<-i)
wg.Done()
}

func main() {
wg.Add(2)
ch1 := make(chan int)
ch2 := make(chan int)

go fun1(ch1)
go fun1(ch2)

ch1 <- 1
      ch2 <- 2

      wg.Wait()
fmt.Println("全部 goroutine 運行結束")
}

 

Context 方式:

func main()  {
ctx,cancel := context.WithCancel(context.Background())
go watch(ctx,"監控一")
go watch(ctx,"監控二")
go watch(ctx,"監控三")

time.Sleep(6 * time.Second)
fmt.Println("結束監控")
cancel()

time.Sleep(2*time.Second)

}

func watch(ctx context.Context,name string) {
for {
select {
case <- ctx.Done():
fmt.Println(name+"監控結束,退出")
return
             default:
fmt.Println(name+"監控中")
time.Sleep(2*time.Second)
}
}
}
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM