日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang中的runtime

發布時間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang中的runtime 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Gosched

runtime.Gosched()讓出cpu的時間片,讓出當前協程的執行權限,調度器安排其他等待的任務運行,并在下次某個時間從該位置恢復執行

和協程 yield 作用類似

func main() {go func() {for i := 0; i < 5; i++ {//不一定打印5次fmt.Println("go")}}() //別忘記()for i := 0; i < 2; i++ {//讓出我的時間片runtime.Gosched()fmt.Println("hello")} }

Goexit

調用runtime.Goexit()將立即終止當前協程運行,調度器確保所有已注冊defer延遲調用執行
有時候我們會遇到這個問題

調度器確保所有已注冊defer延遲調用被執行,要在Goexit之前注冊

func test() {defer fmt.Println("test-------")return //終止使用此函數fmt.Println("1111111111") }func main() {go func() {fmt.Println("aaaa")//調用了別的函數test()//沒打印fmt.Println("bbb")}() //別忘記()for {}}

輸出

aaaa test------- bbb func test() {defer fmt.Println("test-------")//終止這個協程runtime.Goexit()//returnfmt.Println("1111111111") }func main() {go func() {fmt.Println("aaaa")//調用了別的函數test()//沒打印fmt.Println("bbb")}() //別忘記()for {}}

輸出

aaaa test-------

GOMAXPROCS

調用runtime.GOMAXPROCS()用來設置可以并行計算的cpu核數的最大值,并返回之前的值

func main() {//指定核數n := runtime.GOMAXPROCS(2)fmt.Println(n) }

多任務資源競爭

//定義一個打印機 //打印機屬于公共資源 func Printer(str string) {for _, data := range str{fmt.Printf("%c", data)time.Sleep(time.Second)}fmt.Printf("\n") }func Person1() {Printer("hello") }func Person2() {Printer("world") }func main() {//新建2個協程,代表2個人,2個人同時使用打印機go Person1()go Person2()//特意不讓主協程結束,死循環for {}}

打印會亂掉
我們如何讓他同步呢

其他的小功能

返回go的根目錄,存在GOROOT環境變量返回該環境變量,不存在返回go的根目錄

func GOROOT() string

版本

func Version() string

cpu個數

func NumCPU() int

GC

func GC()

查看時間

go build main.go time -p ./main

輸出結果:

0 9223372030412324865 1 9223372030412324865 real 1.92 // 程序開始到結束時間差 ( CPU 時間) user 3.80 // 用戶態所使用 CPU 時間片 (多核累加) sys 0.01 // 內核態所使用 CPU 時間片

命令行輸入:

GOMAXPROCS=8 time -p ./main

輸出結果:

1 9223372030412324865 0 9223372030412324865 real 1.89 user 3.76 // 雖然總時間差不多,但由 2 個核并行,real 時間自然少了許多。 sys 0.00 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的golang中的runtime的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。