美文网首页
gmp状态流转

gmp状态流转

作者: freedom117 | 来源:发表于2021-12-13 21:11 被阅读0次

    G 的状态流转

    image.png

    P 的状态流转


    image.png

    **
    通常情况下(在程序运行时不调整 P 的个数),P 只会在上图中的四种状态下进行切换。当程序刚开始运行进行初始化时,所有的 P 都处于 _Pgcstop 状态, 随着 P 的初始化( runtime.procresize),会被置于 _Pidle。
    当 M 需要运行时,会 runtime.acquirep 来使 P 变成 Prunning 状态,并通过 runtime.releasep 来释放。
    当 G 执行时需要进入系统调用,P 会被设置为 _Psyscall, 如果这个时候被系统监控抢夺( runtime.retake),则 P 会被重新修改为 _Pidle。
    如果在程序运行中发生 GC,则 P 会被设置为 _Pgcstop, 并在 runtime.startTheWorld 时重新调整为 _Prunning。
    **

    m的状态流转

    image.png

    M 只有自旋和非自旋两种状态。自旋的时候,会努力找工作;找不到的时候会进入非自旋状态,之后会休眠,直到有工作需要处理时,被其他工作线程唤醒,又进入自旋状态。

    相关文章

      网友评论

          本文标题:gmp状态流转

          本文链接:https://www.haomeiwen.com/subject/nvxhjltx.html