Go time.Sleep()是否阻止上下文?
提到,Sleep会将当前goroutine(Go time.Sleep()是否阻止上下文?,go,goroutine,Go,Goroutine,提到,Sleep会将当前goroutine(G)暂停至少一段时间d G在d期间不能在运行队列(下面的灰色圆圈)中 p是上下文M是内核线程 假设有8个内核线程(因为8个内核CPU-runtime.numpu()) 转到运行时维护runtime.GOMAXPROCS(runtime.numpu())上下文数 使用GO版本1.12 1) Goroutine(G)在哪个队列中等待持续时间d?我看到跑步队列(上方为灰色) 2) 在该持续时间d,相应的上下文(p)是否从同一内核线程(M)的运行队列中调
G
)暂停至少一段时间d
G
在d
期间不能在运行队列(下面的灰色圆圈)中
p
是上下文M
是内核线程
假设有8个内核线程(因为8个内核CPU-runtime.numpu()
)
转到运行时维护runtime.GOMAXPROCS(runtime.numpu())
上下文数
使用GO版本1.12 1) Goroutine(
G
)在哪个队列中等待持续时间d
?我看到跑步队列(上方为灰色)
2) 在该持续时间d
,相应的上下文(p
)是否从同一内核线程(M
)的运行队列中调度另一个Goroutine
3) GO程序可以在特定上下文(p
)运行队列上安排Goroutine吗?0)为什么这很重要?这些是低级实现细节,可能会在版本和目标OS/arch之间发生更改。1) 运行队列就是队列。2) 是的,调度另一个goroutine是调用Sleep
的关键。3) 不,程序无法控制低级调度细节,因此不应在意。