go语言runtime.Gosched
func say(s string) {
<span style="white-space:pre"/>for i := 0; i < 2; i {
<span style="white-space:pre"/>runtime.Gosched()
<span style="white-space:pre"/>fmt.Println(s)
<span style="white-space:pre"/>}
}
func main() {
<span style="white-space:pre"/>go say("world")
<span style="white-space:pre"/>say("hello")
}
输出:
hello
world
hello
1、先输出了hello,后输出了world
2、hello输出了2个,world输出了1个(因为第2个hello输出完,主线程就退出了,第2个world没机会了)
如果把代码中的runtime.Gosched()注释掉,执行结果为:
hello
hello
因为say("hello")这句占用了时间,等它执行完,线程也结束了,say("world")就没有机会了。
从这里也可以看出,goroutine并不是真正的“并行”,goroutine都在一个线程里,它们之间通过不停的让出时间片轮流运行,达到类似运行的效果。
到此这篇关于“go语言runtime.Gosched”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
go语言runtime.Gosched
Go 语言传统的同步 goroutine 的机制
goroutine/Gosched/Goexit/GOMAXPROCS
go语言并发编程
go语言并发之MPG模型
想系统学习GO语言(Golang
Golang基础--常见坑
2018年最全Go语言教程零基础入门到进阶实战视频
Go语言学习3----Go语言特色
Go 语言一本通