numLogicalProcessors
Intel core i7 上是8
(2 X 4 个物理核心)。Linux操作系统。因此,八个操作系统线程(M
)可以并行工作。Go 运行时可以在我的 Go 程序中分配八个上下文(P1
, P2
.... P8
- runtime.GOMAXPROCS(numLogicalProcessors)
)。
Go 遵循M:N
线程模型,其中N
是操作系统线程,M
是 Go 程序的 go 例程。
操作系统调度程序调度操作系统线程。线程状态是WAITING
, RUNNABLE
& EXECUTING
。
Go 调度程序安排 Go 例程。Go 例程状态是WAITING
, RUNNABLE
& EXECUTING
。Goroutine 是一个用户级线程。
Go 程序的运行时是否显式创建这八个操作系统线程(M
)?在将每个上下文(P
)分配给每个操作系统线程(M
)之前?
如果操作系统线程(M1
)被操作系统调度程序抢占(由于时间片),那么goroutine调度程序(P1
)如何使用LRQ管理goroutine的状态G1
?是否P1
从操作系统收到状态已更改的通知M1
?
一只甜甜圈
相关分类