1、goroutine是什么
goroutine是Go並行設計的核心。goroutine說到底其實就是協程,但是它比線程更小,十幾個goroutine可能體現在底層就是五六個線程,Go語言內部幫你實現了這些goroutine之間的內存共享。執行goroutine只需極少的棧內存(大概是4~5KB),當然會根據相應的數據伸縮。也正因為如此,可同時運行成千上萬個並發任務。goroutine比thread更易用、更高效、更輕便。
2、創建goroutine協程
只需在函數調⽤語句前添加 go 關鍵字,就可創建並發執⾏單元。開發⼈員無需了解任何執⾏細節,調度器會自動將其安排到合適的系統線程上執行。
在並發編程里,我們通常想講一個過程切分成幾塊,然后讓每個goroutine各自負責一塊工作。當一個程序啟動時,其主函數即在一個單獨的goroutine中運行,我們叫它main goroutine。新的goroutine會用go語句來創建。
示例:
package main import ( "fmt" "time" ) func newTask() { for { fmt.Println("this is a newTask") time.Sleep(time.Second) //延時1s } } func main() { go newTask() //新建一個協程, 新建一個任務 for { fmt.Println("this is a main goroutine") time.Sleep(time.Second) //延時1s } }
執行結果:
this is a main goroutine this is a newTask this is a newTask this is a main goroutine this is a newTask
原理圖: