关于不可接管阻塞问题

关于不可接管阻塞问题

go对于不可接管阻塞:

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

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

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
Xargin 2021-05-19 17:51:42

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


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

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师