go語言基礎(併發--goroutine+channel)
阿新 • • 發佈:2020-06-27
一、Go協程
1、Go協程和Go主執行緒
1)Go主執行緒(有程式設計師直接稱為執行緒/也可以理解成程序):一個Go執行緒上,可以起多個協程,你可以這樣理解,協程是輕量級的執行緒[編譯器做優化]。
2)Go協程的特點
有獨立的棧空間
共享程式堆空間
排程由使用者控制
協程是輕量級的執行緒9o執行緒-協程
2、案例說明
請編寫一個程式,完成如下功能:
1)在主執行緒(可以理解成程序)中,開啟一個goroutine,該協程每隔1秒輸出"hello,world"
2)在主執行緒中也每隔一秒輸出“hello,golang"”,輸出10次後,退出程式
3)要求主執行緒和goroutine同時執行.
4)畫出主執行緒和協程執行流程圖
package main import( "fmt" "strconv" "time" ) func test(){ fori :=1; i<=10; i++{ fmt.Println("tesst() hello,world"+strconv.rtoa(i)) time.sleep(time.second) } func main(){ go test() ∥開啟了一個協程 for i :=1; i<=10; i++{ fmt.Print1n("main() he11o,golang"+strconv.rtoa(i)) time.sleep(time.second) } }
程式關係示例圖
3、協程小結
1)主執行緒是一個物理執行緒,直接作用在cpu上的。是重量級的,非常耗費cpu 資源。
2)協程從主執行緒開啟的,是輕量級的執行緒,是邏輯態。對資源消耗相對小。
3)Golang的協程機制是重要的特點,可以輕鬆的開啟上萬個協程。其它程式語言的併發機制是一般基於執行緒的,開啟過多的執行緒,資源耗費大,這裡就突顯Golang在併發上的優勢了