go调度

  1. 系统调用
  2. cgo

系统调用

sysmon线程会监控所有执行syscall的线程M,一旦超过某个时间阈值,就将该M与对应的P剥离;

cgo

cgo的m,cgo的调用实际上使用了lockedm和syscall;
g陷入cgocall: lockedm加上syscall的处理逻辑;

m陷入cgo和syscall时,p的状态会被设置为_Psyscall,sysmon周期性地检查并retake p,如果发现p处于这个状态且超过10ms就会强制性收回p,m在cgo和syscall返回后会重新尝试拿p,进入调度循环;


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至yj.mapple@gmail.com

文章标题:go调度

文章字数:123

本文作者:melonshell

发布时间:2020-06-06, 22:31:15

最后更新:2020-06-06, 23:50:30

原始链接:http://melonshell.github.io/2020/06/06/go14_schedule/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

相册