Ответ
MPG — это модель планирования горутин в Go, где M (Machine) — поток ОС, P (Processor) — логический процессор, G (Goroutine) — горутина.
- M выполняет код на ядре CPU.
- P управляет локальной очередью горутин и связывает M с G.
- G — легковесный поток, который планируется P.
Пример работы:
func main() {
go func() { fmt.Println("Goroutine") }() // Создаётся G
runtime.GOMAXPROCS(1) // Устанавливаем 1 P
time.Sleep(time.Millisecond)
}
Нюансы:
- Количество P обычно равно
GOMAXPROCS. - Если P нет свободных, G попадает в глобальную очередь.
- M может блокироваться (например, на syscall), тогда P переходит к другой M.