成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go語言中什么是Goroutines

開發(fā) 前端
程序運行后,雖然mian函數(shù)和ready函數(shù)中都print了開始執(zhí)行的語句,但是很明顯,在Goroutine內(nèi)的函數(shù)并沒有執(zhí)行完成。所以我們?yōu)榱烁珳?zhǔn)的控制Goroutine的并發(fā),需要使用Channel進(jìn)行控制。

基本概念

Goroutine是一個被Go運行時管理的輕量級線程(A goroutine is a lightweight thread managed by the Go runtime)。
為什么沒有采用現(xiàn)有的表示并發(fā)名詞來解釋Go語言中的并發(fā)呢?因為現(xiàn)有的線程、協(xié)程、進(jìn)程等都無法準(zhǔn)確表達(dá)Goroutine。

Goroutines使用方法

函數(shù)并發(fā)執(zhí)行

與普通函數(shù)類似,我們調(diào)用Goroutines時只需要在函數(shù)前加上go關(guān)鍵字。下面的例子中g(shù)o ready()就會并發(fā)執(zhí)行。

package main
import (
"fmt"
"time"
)
func ready() {
fmt.Println("Run func in a goroutine")
}
func main() {
go ready()
time.Sleep(time.Second * 3)
fmt.Println("Main function done")
}

匿名并發(fā)函數(shù)

如果你不想單獨定義,則可以使用匿名方式

package main
import (
"fmt"
"time"
)
func main() {
go func() {
fmt.Println("Run anonymous func in goroutine.")
}()
time.Sleep(time.Second * 3)
fmt.Println("Main function done")
}

如何控制并發(fā)

上面的示例中,我們在主函數(shù)刻意的等待了3秒,如果沒有這3秒會發(fā)生什么呢?我們將time.Sleep注釋掉,另外由于time模塊沒有使用,也需要注釋掉

package main
import (
"fmt"
//"time"
)
func ready() {
fmt.Println("Run func in a goroutine")
}
func main() {
go ready()
//time.Sleep(time.Second * 3)
fmt.Println("Main function done")
}

此時我們發(fā)現(xiàn)Goroutine好像并沒有執(zhí)行,因為只有main函數(shù)中print語句輸出了結(jié)果:

Main function done

那么究竟Goroutine到底有沒有被觸發(fā)呢?我們再通過這個例子看一下,這個例子中,main函數(shù)需要等待2秒,而Goroutine內(nèi)執(zhí)行的函數(shù)則需要等待5秒

package main
import (
"fmt"
"time"
)
func ready(s int) {
fmt.Printf("Run func in a goroutine and wait for %v\n", s)
time.Sleep(time.Second * time.Duration(s))
fmt.Printf("Run func in a goroutine and wait for %v end\n", s)
}
func main() {
mainWaitSec := 2
go ready(5)
fmt.Printf("Run Main function and wait for %v\n", mainWaitSec)
time.Sleep(time.Second * time.Duration(mainWaitSec))
fmt.Printf("Run Main function and wait for %v done\n", mainWaitSec)
}

程序運行后,雖然mian函數(shù)和ready函數(shù)中都print了開始執(zhí)行的語句,但是很明顯,在Goroutine內(nèi)的函數(shù)并沒有執(zhí)行完成。所以我們?yōu)榱烁珳?zhǔn)的控制Goroutine的并發(fā),需要使用Channel進(jìn)行控制。

Run Main function and wait for 2
Run func in a goroutine and wait for 5
Run Main function and wait for 2 done
責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2025-04-02 05:23:00

GoChannel數(shù)據(jù)

2024-04-07 11:33:02

Go逃逸分析

2021-07-15 23:18:48

Go語言并發(fā)

2023-12-22 14:07:00

Go輕量級Goroutines

2023-12-21 07:09:32

Go語言任務(wù)

2023-01-30 15:41:10

Channel控制并發(fā)

2023-11-30 08:09:02

Go語言

2022-07-19 12:25:29

Go

2024-04-01 00:02:56

Go語言代碼

2023-07-29 15:03:29

2021-06-08 07:45:44

Go語言優(yōu)化

2021-11-15 06:56:46

Go語言Tag

2023-01-31 08:48:49

Go語言文件

2012-06-15 09:56:40

2023-12-25 09:58:25

sync包Go編程

2025-02-13 09:02:04

2024-05-10 08:36:40

Go語言對象

2023-12-30 18:35:37

Go識別應(yīng)用程序

2013-06-25 09:52:32

GoGo語言Go編程

2024-01-08 07:02:48

數(shù)據(jù)設(shè)計模式
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲日本成人 | 欧美成人hd | 国产精品久久久久久久久久久久久 | 欧美一级免费 | 99精品免费在线观看 | 久久国产亚洲 | 免费在线观看一级毛片 | 成人视屏在线观看 | 国产精品国产精品国产专区不蜜 | 日一区二区 | 黑人精品 | 国产免费一区 | 毛片一级片 | 久久精品久久综合 | 欧美一二三区 | 男女视频在线观看免费 | 国产视频亚洲视频 | 久久99成人 | 热re99久久精品国产99热 | 国产精品久久久久久久久久久久久 | 国产黄色大片在线观看 | 久久久综合色 | 国产综合一区二区 | 国产亚洲精品久久情网 | 午夜精品久久久久久久久久久久 | 久久久成人动漫 | 国产成人精品视频 | 久久综合久久久 | 97人人草| 国产精品永久久久久久久www | 成人国产一区二区三区精品麻豆 | 每日更新av | 色综合av| 亚洲免费高清 | 亚洲国产精品99久久久久久久久 | 国产精品特级毛片一区二区三区 | 精品国产乱码久久久 | 久在线视频 | 欧美一级黄色免费看 | 中文字幕四虎 | 国产精品久久国产精品久久 |