numLogicalProcessors
на Intel Core i7 - 8
(2 X 4 физических ядра). Linux ОС. Итак, восемь потоков ОС (M
) могут работать параллельно. Go во время выполнения может назначить восемь контекстов (P1
, P2
.... P8
- runtime.GOMAXPROCS(numLogicalProcessors)
) в моей программе Go.
Go соответствует M:N
модели потоков, где N
ОС потоков и M
go подпрограммы Go программы.
Расписания планировщика ОС Потоки ОС . Состояниями потоков являются WAITING
, RUNNABLE
& EXECUTING
.
Go расписания планировщика Go подпрограммы. Go -программные состояния: WAITING
, RUNNABLE
& EXECUTING
. Goroutine - это поток уровня пользователя.
Во время выполнения программы Go явно создаются эти восемь потоков ОС (M
)? перед назначением каждого контекста (P
) каждому потоку ОС (M
)?
Если поток ОС (M1
) имеет приоритет (из-за временного интервала) по планировщику ОС, как планировщик рутин (P1
) управляет состоянием рутины G1
с помощью LRQ? Получает ли P1
уведомление от ОС, что состояние M1
изменилось?