Go 语言面试题 100 讲之 036篇:Go 中哪些动作会触发 runtime 调度?

作者: 王炳明 分类: Golang 面试题 发布时间: 2021-09-27 22:44 热度:712

查看完整目录 –>《Go 语言面试题 100 讲


goroutine 在遇到哪些情况会触发 runtime 的调度器去调度呢?

第一种:系统调用 SysCall

当你在 goroutine 进行一些 sleep 休眠、读取磁盘或者发送网络请求时,其实都会发生系统调用,进入操作系统内核。

而一旦发生系统调用,就会直接触发 runtime 的调度,当前的 P 就会去找其他的 M 进行绑定,并取出 G 开始运行。

第二种:等待锁、通道

此外,在你的代码中,若因为锁或者通道导致代码阻塞了,也会触发调度。

第三种:人工触发

在代码中直接调用 runtime.Gosched 方法,也可以手动触发。

另外说一个小知识,当你执行 fmt.Println 的时候,也会触发调度,这是为什么呢?留给你自己思考咯

文章有帮助,请作者喝杯咖啡?

发表评论