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

Go語言中什么是Goroutines

開發 前端
程序運行后,雖然mian函數和ready函數中都print了開始執行的語句,但是很明顯,在Goroutine內的函數并沒有執行完成。所以我們為了更精準的控制Goroutine的并發,需要使用Channel進行控制。

基本概念

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

Goroutines使用方法

函數并發執行

與普通函數類似,我們調用Goroutines時只需要在函數前加上go關鍵字。下面的例子中go ready()就會并發執行。

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

匿名并發函數

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

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

如何控制并發

上面的示例中,我們在主函數刻意的等待了3秒,如果沒有這3秒會發生什么呢?我們將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")
}

此時我們發現Goroutine好像并沒有執行,因為只有main函數中print語句輸出了結果:

Main function done

那么究竟Goroutine到底有沒有被觸發呢?我們再通過這個例子看一下,這個例子中,main函數需要等待2秒,而Goroutine內執行的函數則需要等待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函數和ready函數中都print了開始執行的語句,但是很明顯,在Goroutine內的函數并沒有執行完成。所以我們為了更精準的控制Goroutine的并發,需要使用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
責任編輯:武曉燕 來源: 今日頭條
相關推薦

2025-04-02 05:23:00

GoChannel數據

2023-12-21 07:09:32

Go語言任務

2024-04-07 11:33:02

Go逃逸分析

2021-07-15 23:18:48

Go語言并發

2023-12-22 14:07:00

Go輕量級Goroutines

2021-11-15 06:56:46

Go語言Tag

2023-01-31 08:48:49

Go語言文件

2023-01-30 15:41:10

Channel控制并發

2023-11-30 08:09:02

Go語言

2022-07-19 12:25:29

Go

2024-04-01 00:02:56

Go語言代碼

2021-06-08 07:45:44

Go語言優化

2023-07-29 15:03:29

2023-12-30 18:35:37

Go識別應用程序

2025-03-27 00:45:00

2013-06-25 09:52:32

GoGo語言Go編程

2024-01-08 07:02:48

數據設計模式

2021-07-13 06:44:04

Go語言數組

2023-10-09 07:14:42

panicGo語言

2023-11-21 15:46:13

Go內存泄漏
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美黄视频| 在线看无码的免费网站 | 日本a视频| 国产日韩欧美二区 | 国产午夜精品一区二区三区嫩草 | 北条麻妃99精品青青久久主播 | 武道仙尊动漫在线观看 | 久色视频在线 | 国产午夜精品久久 | 一区二区三区四区免费视频 | 精品一区二区三区在线视频 | 日韩精品久久久久久 | 午夜国产羞羞视频免费网站 | 91网站在线观看视频 | 色视频网站 | 成人福利影院 | 日本免费在线 | 成人精品免费 | www.97zyz.com| 福利一区二区在线 | 国产视频久久 | 欧美亚洲另类在线 | 欧美综合一区二区 | 在线精品亚洲欧美日韩国产 | 国产欧美日韩在线播放 | 欧美电影一区 | 亚洲精品日本 | 羞羞色在线观看 | 麻豆changesxxx国产 | 国产91视频播放 | 精品国产乱码久久久久久丨区2区 | 欧美日韩国产三级 | 欧美日一区二区 | 爱综合| 国产一区二区三区日韩 | 久久精品欧美一区二区三区不卡 | 国产精品久久久久久久久久久免费看 | 在线一区二区三区 | 国产精品成人国产乱一区 | 中文字幕在线第二页 | 99reav |