偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go語(yǔ)言中什么是Goroutines

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

基本概念

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

Goroutines使用方法

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

與普通函數(shù)類似,我們調(diào)用Goroutines時(shí)只需要在函數(shù)前加上go關(guān)鍵字。下面的例子中g(shù)o ready()就會(huì)并發(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ù)

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

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ā)

上面的示例中,我們?cè)谥骱瘮?shù)刻意的等待了3秒,如果沒(méi)有這3秒會(huì)發(fā)生什么呢?我們將time.Sleep注釋掉,另外由于time模塊沒(méi)有使用,也需要注釋掉

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")
}

此時(shí)我們發(fā)現(xiàn)Goroutine好像并沒(méi)有執(zhí)行,因?yàn)橹挥衜ain函數(shù)中print語(yǔ)句輸出了結(jié)果:

Main function done

那么究竟Goroutine到底有沒(méi)有被觸發(fā)呢?我們?cè)偻ㄟ^(guò)這個(gè)例子看一下,這個(gè)例子中,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)
}

程序運(yùn)行后,雖然mian函數(shù)和ready函數(shù)中都print了開(kāi)始執(zhí)行的語(yǔ)句,但是很明顯,在Goroutine內(nèi)的函數(shù)并沒(méi)有執(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é)任編輯:武曉燕 來(lái)源: 今日頭條
相關(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語(yǔ)言并發(fā)

2023-12-22 14:07:00

Go輕量級(jí)Goroutines

2023-12-21 07:09:32

Go語(yǔ)言任務(wù)

2023-01-30 15:41:10

Channel控制并發(fā)

2023-11-30 08:09:02

Go語(yǔ)言

2022-07-19 12:25:29

Go

2024-04-01 00:02:56

Go語(yǔ)言代碼

2023-07-29 15:03:29

2021-06-08 07:45:44

Go語(yǔ)言優(yōu)化

2021-11-15 06:56:46

Go語(yǔ)言Tag

2023-01-31 08:48:49

Go語(yǔ)言文件

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語(yǔ)言對(duì)象

2023-12-30 18:35:37

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

2013-06-25 09:52:32

GoGo語(yǔ)言Go編程

2024-01-08 07:02:48

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

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