Go 语言多个Goroutine
Goroutine是一种函数或方法,可与程序中存在的任何其他Goroutine一起独立且同时执行。换句话说,每个Go语言中同时执行的活动称为Goroutines。在Go语言中,允许您在一个程序中创建多个goroutine。您可以简单地通过使用go关键字作为函数或方法调用的前缀来创建goroutine,如以下语法所示:
func name(){ // 语句 } //使用go关键字创建goroutine go name()
现在,借助示例讨论如何创建和使用多个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 开始...!") // 调用 Goroutine 1 go Aname() // 调用 Goroutine 2 go Aid() time.Sleep(3500 * time.Millisecond) fmt.Println("\n!...主 Go-routine 结束...!") }
输出:
!...主 Go-routine 开始...! Rohit Suman Aman 300 Ria 301 302 303 !...主 Go-routine 结束...!
创建:在上面的示例中,除了主goroutine之外,我们还有两个goroutine,即Aname和Aid。在这里,Aname打印作者的姓名,Aid打印作者的id。
工作:在这里,我们有两个goroutine,即Aname和Aid,以及一个主goroutine。当我们首先运行该程序时,主goroutine分层并打印“ !...主 Go-routine 开始...!”,这里的主goroutine就像是一个父goroutine一样,其他goroutine是它的子进程,因此先运行主goroutine之后再启动其他goroutine,如果主goroutine终止,则其他goroutine也终止了。因此,在主要goroutine之后,Aname和Aid goroutine将同时开始工作。Aname goroutine从150ms开始工作,而Aid从500ms开始工作。