gosched
Go语言runtime.Gosched()函数浅析
这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会。同时,当前的goroutine也会在未来的某个时间点继续运行。
请看下面这个例子(show.go):
package main
import (
"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]# ./show
Haha没有打印出数字,可以看到goroutine没有获得机会运行。
修改代码:在main函数中加上runtime.Gosched():
package main
import (
"fmt"
"runtime"
)
func showNumber (i int) {
fmt.Println(i)
}
func main() {
for i := 0; i < 10; i++ {
go showNumber(i)
}
runtime.Gosched() //GoSched虽然让出cpu使用权,但是依然会被调度,在执行很长一段时间后有机会刚好获得cpu使用权,不一定等到所有其他go程执行完了才执行,它出让cpu的量级比sleep小的多,因为cpu的调度是随机的
fmt.Println("Haha")
}编译运行:
[root@Fedora goEx]# go build show.go
[root@Fedora goEx]# ./show
0
1
2
3
4
5
6
7
8
9
Haha可以看到goroutine获得了运行机会,打印出了数字。

浙公网安备 33010602011771号