Go併發
阿新 • • 發佈:2020-12-01
1.WaitGroup等待當前執行的協程
package main import ( "fmt" "runtime" "sync" ) // Go語言的併發指的是能讓某個函式獨立於其他函式執行的能力 // Go的排程器是在作業系統之上的 //Go的併發同步模型來自一個叫做通訊順序程序(CSP)的東西 //同步和傳遞資料的關鍵資料型別是通道 func main() { // 分配一個邏輯處理器給排程器使用 runtime.GOMAXPROCS(1) //wg用來等待程式完成 //計數加2,表示要等待2個goroutine var wg sync.WaitGroup wg.Add(2) fmt.Println("Start Goroutines") //宣告一個匿名函式,建立一個goroutine go func() { // 在函式退出時呼叫Done來同志main函式工作已經完成 defer wg.Done() for count := 0; count < 3; count++ { for char := 'a'; char < 'a'+26; char++ { fmt.Printf("%c ", char) } } }() go func(){ defer wg.Done() for count := 0; count < 3; count++ { for char := 'A'; char < 'A'+26; char++ { fmt.Printf("%c ", char) } } }() //等待goroutine結束 fmt.Println("Waiting To Finish") wg.Wait() fmt.Println("\nTerminating Program") }