Goroutine是一種函數(shù)或方法,可與程序中存在的任何其他Goroutine一起獨(dú)立且同時(shí)執(zhí)行。換句話說,每個(gè)Go語言中同時(shí)執(zhí)行的活動(dòng)稱為Goroutines。在Go語言中,允許您在一個(gè)程序中創(chuàng)建多個(gè)goroutine。您可以簡單地通過使用go關(guān)鍵字作為函數(shù)或方法調(diào)用的前綴來創(chuàng)建goroutine,如以下語法所示:
func name(){ // 語句 } //使用go關(guān)鍵字創(chuàng)建goroutine go name()
現(xiàn)在,借助示例討論如何創(chuàng)建和使用多個(gè)goroutine:
package main import ( "fmt" "time" ) //goroutine 1 func Aname() { arr1 := [4]string{"Rohit", "Suman", "Aman", "Ria"} for t1 := 0; t1 <= 3; t1++ { time.Sleep(150 * time.Millisecond) fmt.Printf("%s\n", arr1[t1]) } } // goroutine 2 func Aid() { arr2 := [4]int{300, 301, 302, 303} for t2 := 0; t2 <= 3; t2++ { time.Sleep(500 * time.Millisecond) fmt.Printf("%d\n", arr2[t2]) } } func main() { fmt.Println("!...主 Go-routine 開始...!") // 調(diào)用 Goroutine 1 go Aname() // 調(diào)用 Goroutine 2 go Aid() time.Sleep(3500 * time.Millisecond) fmt.Println("\n!...主 Go-routine 結(jié)束...!") }
輸出:
!...主 Go-routine 開始...! Rohit Suman Aman 300 Ria 301 302 303 !...主 Go-routine 結(jié)束...!
創(chuàng)建:在上面的示例中,除了主goroutine之外,我們還有兩個(gè)goroutine,即Aname和Aid。在這里,Aname打印作者的姓名,Aid打印作者的id。
工作:在這里,我們有兩個(gè)goroutine,即Aname和Aid,以及一個(gè)主goroutine。當(dāng)我們首先運(yùn)行該程序時(shí),主goroutine分層并打印“ !...主 Go-routine 開始...!”,這里的主goroutine就像是一個(gè)父goroutine一樣,其他goroutine是它的子進(jìn)程,因此先運(yùn)行主goroutine之后再啟動(dòng)其他goroutine,如果主goroutine終止,則其他goroutine也終止了。因此,在主要goroutine之后,Aname和Aid goroutine將同時(shí)開始工作。Aname goroutine從150ms開始工作,而Aid從500ms開始工作。