goroutine状态变换
/ / 点击G状态变换
graph TD;
id1((Start))-->|新建|Gidle
Gidle-->|初始化|Grunnable
Grunnable-->|开始运行|Grunning
Grunning-->|运行完成|Gdead
Gdead-->|结束|id100((End))
Grunning-->|等待事件|Gwaiting
Gwaiting-->|"事件到来,G去向「①p.runq ②sched.runq ③running」"|Grunnable
Grunning-->|"进入系统调用,此时如果可用M不够用会创建线程"|Gsyscall
Gsyscall-->|"退出系统调用,被放入调度器可运行队列"|id2{是否可直接运行}
id2-->|是|Grunning
id2-->|否|Grunnable
Grunning-->|需要扩展/收缩栈|Gcopystack
Gcopystack-->|扩展收缩栈完成|Grunning
Gdead-->|重新初始化|Grunnable
P状态变换
graph TD; id0((Start))-->|新建|Pgcstop Pgcstop-->|完成初始化|Pidle Pgcstop-->|启动调度|Pidle Pidle-->|与某个M建立关联|Prunning Prunning-->|与某个M断开关联|Pidle Prunning-->|进入系统调用|Psyscall Psyscall-->|退出系统调用|Prunning Pdead-->|结束|id100((End)) Pidle-->|丢弃|Pdead Prunning-->|丢弃|Pdead Psyscall-->|丢弃|Pdead Psyscall-->|停止调度|Pgcstop Pidle-->|停止调度|Pgcstop Prunning-->|停止调度|Pgcstop
全文完。