Documentation提到, Sleep将当前goroutine(G
)暂停至少持续时间d 。
G
在持续时间d
中不能进入运行队列(下面的灰色圆圈)。
https://morsmachine.dk/go-scheduler
P
是上下文。 M
是内核线程
假设有8个内核线程(因为8个核心CPU-runtime.NumCPU()
)
运行时维护runtime.GOMAXPROCS(runtime.NumCPU())
个上下文。
使用GO 1.12版
1)Goroutine(G
)在哪个队列中等待持续时间d
?我看到运行队列(灰色上方)
2)在那个持续时间d
中,那个对应的上下文(P
)是否在同一内核线程(M
)上从其运行队列中调度另一个Goroutine?
3)GO程序可以在特定上下文(P
)运行队列中安排Goroutine吗?