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 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()
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
获得了运行机会,打印出了数字。
参考资料:
(1)Gosched;
(2)What exactly does runtime.Gosched do?。
感谢。解释的很详细。