📜  多个 Goroutine

📅  最后修改于: 2021-10-25 02:51:30             🧑  作者: Mango

先决条件:多个 Goroutines

Goroutine 是一个函数或方法,它与程序中存在的任何其他 Goroutines 相关联地独立并同时执行。或者换句话说,Go 语言中每个并发执行的活动都称为 Goroutines。在 Go 语言中,你可以在一个程序中创建多个 goroutine。您可以简单地使用 go 关键字作为函数或方法调用的前缀来创建 goroutine,如下面的语法所示:

func name(){

// statements
}

// using go keyword as the 
// prefix of your function call
go name()

现在我们通过一个例子来讨论如何创建和处理多个 goroutines:

// 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...!

创建:在上面的例子中,除了 main协程之外,我们还有两个协程,即AnameAid 。在这里, Aname打印作者的姓名, Aid打印作者的 id。

工作:这里,我们有两个 goroutine,即AnameAid和一个主 goroutine。当我们首先运行这个程序时,主协程strat并打印“ !...Main Go-routine Start...! “,这里的主协程就像一个父协程,其他协程是它的子协程,所以第一个主协程在其他协程启动之后运行,如果主协程终止,那么其他协程也会终止。因此,在主协程之后, AnameAid协程同时开始工作。 Aname goroutine 从150ms开始工作, Aid500ms开始工作,如下图所示: