go调度
系统调用
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" 转载请保留原文链接及作者。