知识卡片

系统调用会交还P

专业/工作 · 470.b.1.a.1.c.3.a.6.a.2.d.1.a.1.b.1.a.2.a.7.b.1

内容

当 M 陷入系统调用,P 可被监控线程抢回,绑定其他 M 继续执行任务。发散:调度器要避免一个阻塞线程拖住整个运行资源。

参考来源

- 位置:《Go语言入门到实战(共3册)》第43章《Go语言学习笔记:第18章 并发调度》(源文件:_epub-src/text/part0118.html) - 结论依据:原文围绕“当M陷入系统调用,P可被监控线程抢回,绑定其他M继续执行任务”展开机制、顺序或组件关系说明;摘录中的关键步骤和术语支撑本卡片正文及结构图。 - 原始内容:|| sched.runqsize != 0 { startm(_p_, false) return } ... // 没有任务就放回空闲队列 pidleput(_p_) } 从系统调用返回时,必须检查P是否依然可用,因为可能已被sysmon抢走。 proc1.go func exitsyscall(dummy int32) { _g_ := getg() …