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