在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一 Go 协程是什么?Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。 二 Go 协程相比于线程的优势
三 如何启动一个 Go 协程?调用函数或者方法时,在前面加上关键字 让我们创建一个 Go 协程吧。 package main import ( "fmt" ) func hello() { fmt.Println("Hello world goroutine") } func main() { go hello() fmt.Println("main function") } 在第 11 行, 运行一下程序,你会很惊讶! 该程序只会输出文本
现在你应该能够理解,为何我们的 Go 协程没有运行了吧。在第 11 行调用了 我们现在修复这个问题。 package main import ( "fmt" "time" ) func hello() { fmt.Println("Hello world goroutine") } func main() { go hello() time.Sleep(1 * time.Second) fmt.Println("main function") } 在上面程序的第 13 行,我们调用了 time 包里的函数 在 Go 主协程中使用休眠,以便等待其他协程执行完毕,这种方法只是用于理解 Go 协程如何工作的技巧。信道可用于在其他协程结束执行之前,阻塞 Go 主协程。 四 启动多个 Go 协程为了更好地理解 Go 协程,我们再编写一个程序,启动多个 Go 协程。 package main import ( "fmt" "time" ) func numbers() { for i := 1; i <= 5; i++ { time.Sleep(250 * time.Millisecond) fmt.Printf("%d ", i) } } func alphabets() { for i := 'a'; i <= 'e'; i++ { time.Sleep(400 * time.Millisecond) fmt.Printf("%c ", i) } } func main() { go numbers() go alphabets() time.Sleep(3000 * time.Millisecond) fmt.Println("main terminated") } 在上面程序中的第 21 行和第 22 行,启动了两个 Go 协程。现在,这两个协程并发地运行。 该程序会输出: 1 a 2 3 b 4 c 5 d e main terminated
程序的运作如下图所示 第一张蓝色的图表示
|
请发表评论