Golang 多个Goroutines
一个Goroutine是一个独立执行的函数或方法,它与你程序中存在的任何其他Goroutine同时执行。换句话说,Go语言中每个同时执行的活动都被称为Goroutines。在Go语言中,你可以在一个程序中创建多个Goroutines。你可以通过使用go关键字作为函数或方法调用的前缀来创建一个goroutine,如下面的语法所示。
func name(){
// statements
}
// using go keyword as the
// prefix of your function call
go name()
现在我们借助一个例子来讨论如何创建和处理多个goroutine。
// Go program to illustrate Multiple Goroutines
package main
import (
"fmt"
"time"
)
// For 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])
}
}
// For 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])
}
}
// Main function
func main() {
fmt.Println("!...Main Go-routine Start...!")
// calling Goroutine 1
go Aname()
// calling Goroutine 2
go Aid()
time.Sleep(3500 * time.Millisecond)
fmt.Println("\n!...Main Go-routine End...!")
}
输出
!...Main Go-routine Start...!
Rohit
Suman
Aman
300
Ria
301
302
303
!...Main Go-routine End...!
创建: 在上面的例子中,除了主程序外,我们有两个goroutine,即Aname ,和Aid 。 在这里, Aname 打印作者的名字, Aid 打印作者的ID。
工作: 在这里,我们有两个goroutine,即 Aname 和 Aid ,以及一个main goroutine。当我们运行这个程序时,首先是主程序启动并打印”!……主程序启动……!”,这里的主程序就像一个父程序,其他程序是它的子程序,所以首先是主程序运行,然后其他程序启动,如果主程序终止,其他程序也会终止。所以,在主程序之后, Aname 和 Aid 的程序开始同时工作。 Aname 程序从 150ms 开始工作, Aid 程序从 500ms 开始工作,如下图所示: