自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go語言中什么是Goroutines

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

基本概念

Goroutine是一個被Go運行時管理的輕量級線程(A goroutine is a lightweight thread managed by the Go runtime)。
為什么沒有采用現(xiàn)有的表示并發(fā)名詞來解釋Go語言中的并發(fā)呢?因為現(xiàn)有的線程、協(xié)程、進程等都無法準確表達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)榱烁珳实目刂艷oroutine的并發(fā),需要使用Channel進行控制。

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

2025-04-02 05:23:00

GoChannel數(shù)據(jù)

2023-12-21 07:09:32

Go語言任務(wù)

2021-07-15 23:18:48

Go語言并發(fā)

2024-04-07 11:33:02

Go逃逸分析

2021-11-15 06:56:46

Go語言Tag

2023-12-22 14:07:00

Go輕量級Goroutines

2023-01-31 08:48:49

Go語言文件

2022-07-19 12:25:29

Go

2023-07-29 15:03:29

2023-11-30 08:09:02

Go語言

2024-04-01 00:02:56

Go語言代碼

2023-01-30 15:41:10

Channel控制并發(fā)

2021-06-08 07:45:44

Go語言優(yōu)化

2018-12-11 10:43:09

Go語言 HTTP服務(wù)器

2023-10-09 07:14:42

panicGo語言

2021-07-13 06:44:04

Go語言數(shù)組

2013-06-25 09:52:32

GoGo語言Go編程

2023-11-21 15:46:13

Go內(nèi)存泄漏

2024-01-08 07:02:48

數(shù)據(jù)設(shè)計模式

2025-03-27 00:45:00

點贊
收藏

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