关于不可接管阻塞问题

来源:1-4 Go 程序是怎么跑起来的

Garry_27

2021-05-19 11:27:51

go对于不可接管阻塞:

    ​比如syscall这样的阻塞发生时,为什么是将M和P剥离,为什么不能做到M和G剥离。是因为

   go调度器没办法做到当前g发生syscall的不知道什么时候唤醒吗。还有就是M和P剥离开后这个M后续怎么处理的是一直卡在那等待syscall返回码

写回答

1回答

Xargin

2021-05-19

因为这时候阻塞位置的指令是 SYSCALL,其返回是由操作系统控制的。。Go 本身啥也做不了


剥掉 P 以后,只能等待 SYSCALL 指令返回。返回之后,M 会判断身上是否有 P,有的话继续执行,没有就把 G 塞进队列去。没返回之前只能等待。

0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程