Go语言自学系列 | golang并发编程之runtime包
生活随笔
收集整理的這篇文章主要介紹了
Go语言自学系列 | golang并发编程之runtime包
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
視頻來源:B站《golang入門到項目實戰 [2021最新Go語言教程,沒有廢話,純干貨!持續更新中...]》
一邊學習一邊整理老師的課程內容及試驗筆記,并與大家分享,侵權即刪,謝謝支持!
附上匯總貼:Go語言自學系列 | 匯總_COCOgsta的博客-CSDN博客
runtime包里面定義了一些協程管理相關的api
runtime.Gosched()
讓出CPU時間片,重新等待安排任務
package main import ( "fmt" "runtime" ) func show(s string) { for i := 0; i < 2; i++ { fmt.Println(s) } } func main() { go show("java") // 主協程 for i := 0; i < 2; i++ { // 切一下,再次分配任務 runtime.Gosched() // 注釋掉查看結果 fmt.Println("golang") } }運行結果
[Running] go run "d:\SynologyDrive\軟件開發\go\golang入門到項目實戰\goproject\360duote.com\pro01\test.go" java java golang golangruntime.Goexit()
退出當前協程
package main import ( "fmt" "runtime" "time" ) func show(s string) { for i := 0; i < 10; i++ { if i >= 5 { runtime.Goexit() } fmt.Printf("i: %v\n", i) } } func main() { go show("java") time.Sleep(time.Second) }運行結果
[Running] go run "d:\SynologyDrive\軟件開發\go\golang入門到項目實戰\goproject\360duote.com\pro01\test.go" i: 0 i: 1 i: 2 i: 3 i: 4runtime.GOMAXPROCS
package main import ( "fmt" "runtime" "time" ) func a() { for i := 0; i < 10; i++ { fmt.Println("A:", i) time.Sleep(time.Millisecond * 100) } } func b() { for i := 0; i < 10; i++ { fmt.Println("B:", i) } } func main() { fmt.Printf("runtime.NumCPU(): %v\n", runtime.NumCPU()) runtime.GOMAXPROCS(2) // 修改為1查看效果 go a() go b() time.Sleep(time.Second) }運行結果
[Running] go run "d:\SynologyDrive\軟件開發\go\golang入門到項目實戰\goproject\360duote.com\pro01\test.go" runtime.NumCPU(): 8 B: 0 B: 1 B: 2 A: 0 B: 3 B: 4 B: 5 B: 6 B: 7 B: 8 B: 9 A: 1 A: 2 A: 3 A: 4 A: 5 A: 6 A: 7 A: 8 A: 9如果修改最大核心數為1,運行結果如下,不會出現交替執行現象
[Running] go run "d:\SynologyDrive\軟件開發\go\golang入門到項目實戰\goproject\360duote.com\pro01\test.go" runtime.NumCPU(): 8 B: 0 B: 1 B: 2 B: 3 B: 4 B: 5 B: 6 B: 7 B: 8 B: 9 A: 0 A: 1 A: 2 A: 3 A: 4 A: 5 A: 6 A: 7 A: 8 A: 9總結
以上是生活随笔為你收集整理的Go语言自学系列 | golang并发编程之runtime包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做了一个十字绣软件
- 下一篇: 使用向日葵、TeamViewer、tod