线程并发-执行管理(hand off 机制/交接机制)

153 阅读1分钟

概念

当本线程 M1 因为 G1 进行的系统调用阻塞时,线程释放绑定的 P1,把 P1 转移给其他空闲的 M2 执行。
当 M1 发生上线文切换(软中断)时,需要对执行现场进行保护,以便下次被调度执行时进行现场恢复。Go 调度器 M1 的栈保存在 G1 对象上,只需要将 M1 所需要的寄存器(SP、PC 等)保存到 G1 对象上就可以实现现场保护。当这些寄存器数据被保护起来,就随时可以做上下文切换了。
如果此时 G1 任务还没有执行完,M1 可以将任务重新丢到 P1 的任务队列,等待下一次被调度执行。当再次被调度执行时,M1 通过访问 G1 的 vdsoSP、vdsoPC 寄存器进行现场恢复(从上次中断位置继续执行)。

应用

在 GO 的 GMP 模型中使用了。