欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > go语言并发编程2-runtime

go语言并发编程2-runtime

2025/9/23 20:30:53 来源:https://blog.csdn.net/qq_28391061/article/details/140178260  浏览:    关键词:go语言并发编程2-runtime

runtime.Gosched()

作用是让出CPU时间片,重新等待安排任务。执行runtime.Gosched()后,其他协程优先执行,当前所在协程最后执行。

package mainimport ("fmt""runtime"
)func main() {go func(s string) {for i := 0; i < 10; i++ {fmt.Println(s)}}("world")// 主协程for i := 0; i < 2; i++ {// 切一下,再次分配任务runtime.Gosched()fmt.Println("hello")}
}

runtime.Goexit()

终止协程,不再调用,注意不能在main方法中终止,会触发panic.

package mainimport ("fmt""runtime""time"
)func printHello() {defer fmt.Println("end func printHello")for i := 1; i < 10; i++ {fmt.Println("start print")if i%4 == 0 {runtime.Goexit()}fmt.Printf("start print:%d\n", i)}
}func main() {go printHello()time.Sleep(6 * time.Second)
}

由以上代码可以看出,实际上触发runtime.Goexit()后,协程立即停止运行了。

runtime.GOMAXPROCS

设置最大运行核心数,Go运行时的调度器使用GOMAXPROCS参数来确定需要使用多少个OS线程来同时执行Go代码

其他

runtime包实际上有非常多方法,例如加上panic的trace信息:

package mainimport ("fmt""runtime""time"
)func a() {err := runtime.StartTrace()if err != nil {return}fmt.Println("start trace__")defer fmt.Printf("done")for i := 1; i < 10; i++ {if i%4 == 0 {panic("err non")}}runtime.StopTrace()
}func main() {go a()time.Sleep(time.Second)
}

runtime还有很多其他的用法,之后可以挨个试试。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词