golang的GMP模型的一个小问题

当一个g阻塞在网络io的时候,此时g会离开当前的p到一个netpoll的地方,同时m也与p解绑单独去看守这个g,等到g的网络时间就绪后,这个g是被放回的本地队列还是全局队列?

阅读 1.6k
2 个回答

g的网络时间就绪后, 首先看守这个g的m会与新的p(空闲)进行绑定, 然后把g放到p的本地队列

问题本身不太准确:go实现的是非阻塞网络IO,当网络事件未就绪时G会与M解绑,挂在某个等待队列,而M并不会去“看守”这个G。事件就绪是通过 runtime.netpoll 来检测感知的,runtime.netpoll 会再 schedulesysmon 中调用。G就绪的话,可能被放在P本地,也可能在全局队列。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题