GO總結六協程

2021-10-21 06:57:20 字數 1110 閱讀 1363

比執行緒更加輕量級的並行方法。go從語言層次就支援了這一操作

使用起來很簡單,就只用關鍵字go標識一下,它就自動開乙個協程去執行了

package main

import (

"fmt"

"time"

)func show()

func main()

結果

注意,主協程退出後,子協程也會退出

讓出時間片,其他協程先執行

package main

import (

"fmt"

"runtime"

)func show()

func main()

結果

結束協程

可用於協程同步

package main

import (

"fmt"

)var ch1 = make(chan int)

//建立全域性channel

var num int = 0

func show()

func add()

func main()

}

結果

主協程阻塞,管道阻塞當num++後,才能列印

管道關閉用close(管道名稱)

go 協程等待

sync包提供了基本的同步基元,如互斥鎖 但是這裡不是討論執行緒通訊的問題 而執行緒通訊應使用channel 以前使用time.sleep 來保證執行緒執行完成,顯然執行緒執行所需要的時間不確定 sync裡面有乙個waitgroup,它是乙個結構體,可以用於等待執行緒執行 這樣不用去估算執行緒需要執...

Go 協程 通道

目錄 go 協程 go 通道 go 協程go 協程可以看作是輕量級執行緒。與執行緒相比,建立乙個go協程的成本很小。因此在go應用中,常常會看到有數以千計的go協程併發地執行 go 協程相比於執行緒的優勢 啟動乙個go協程 在呼叫函式和方法時,在前面加上關鍵字go,可以讓乙個新的go協程併發執行 p...

go簡單協程池實現

為防止無限制開啟gorouting造成的cpu效能浪費以及更嚴重的記憶體溢位和程式崩潰,這裡加單實現一下協程池 深入理解 流程圖 實現 package main import fmt time 有關任務的功能 定義乙個任務型別 type task struct 建立乙個task任務 func new...