這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Go
語言runtime.Gosched()
函數的官方文檔如下:
func Gosched func Gosched()Gosched yields the processor, allowing other goroutines to run. It does not suspend the current goroutine, so execution resumes automatically.
這個函數的作用是讓當前goroutine
讓出CPU
,好讓其它的goroutine
獲得執行的機會。同時,當前的goroutine
也會在未來的某個時間點繼續運行。
請看下面這個例子(show.go
):
package mainimport ( "fmt")func showNumber (i int) { fmt.Println(i)}func main() { for i := 0; i < 10; i++ { go showNumber(i) } fmt.Println("Haha")}
執行結果如下:
[root@Fedora goEx]# go build show.go[root@Fedora goEx]# ./showHaha
沒有列印出數字,可以看到goroutine
沒有獲得機會運行。
修改代碼:在main
函數中加上runtime.Gosched()
:
package mainimport ( "fmt" "runtime")func showNumber (i int) { fmt.Println(i)}func main() { for i := 0; i < 10; i++ { go showNumber(i) } runtime.Gosched() fmt.Println("Haha")}
編譯運行:
[root@Fedora goEx]# go build show.go[root@Fedora goEx]# ./show0123456789Haha
可以看到goroutine
獲得了運行機會,列印出了數字。
參考資料:
(1)Gosched;
(2)What exactly does runtime.Gosched do?。