深入理解Go语言
上QQ阅读APP看书,第一时间看更新

1.3.1 场景1:G1创建G2

本场景主要体现GPM调度的局部性,P拥有G1,M1获取P后开始运行G1,如图1.34所示。

当G1使用go func()创建了G2,为了局部性,G2优先加入P1的本地队列,如图1.35所示。

图1.34 场景1-1

图1.35 场景1-2

场景1主要体现了GPM调度器的局部性,默认规定,如果一个G1创建一个新的G2,则这个G2会优先放在G1所在的本地队列中。这是由于G1和G2所保存的内存和堆栈信息最为相同,它们目前所在的M1和P对于G1和G2的切换成本非常小,这也是局部性要保证的特点。