Проверяет понимание соответствия между количеством ядер и числом логических процессоров P в GMP-модели Go.
GMP — это модель планировщика Go, состоящая из трёх сущностей: G (горутина), M (машина, поток ОС) и P (логический процессор). P — это контекст, который связывает горутины с потоками и определяет, сколько горутин может выполняться параллельно в данный момент. Количество P задаётся переменной GOMAXPROCS, которая по умолчанию равна числу ядер CPU, видимых процессу.
Если в системе 24 ядра и не изменялась переменная GOMAXPROCS, то Go runtime создаст ровно 24 логических процессора P. Это означает, что одновременно может выполняться до 24 горутин (по одной на каждый P), хотя горутин может быть гораздо больше — остальные будут ожидать в очереди.
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println("Логических процессоров:", runtime.GOMAXPROCS(0))
// Выведет 24 на машине с 24 ядрами
}Если нужно ограничить параллелизм, можно установить GOMAXPROCS вручную, например, runtime.GOMAXPROCS(4) — тогда P станет 4, и одновременно будут выполняться только 4 горутины.
Количество P в GMP-модели напрямую зависит от числа ядер и управляется через GOMAXPROCS. Это важно для настройки производительности: слишком много P может привести к лишним переключениям контекста, слишком мало — к недоиспользованию CPU. По умолчанию Go выбирает оптимальное значение, равное числу ядер.