知识卡片
系统调用会交还P
内容
当 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() …