Sobes.tech
Senior

Come funziona il pianificatore di Go, quale modello c'è sotto il cofano? Hai mai dovuto configurare tu stesso il pianificatore?

sobes.tech AI

Risposta dell'AI

Планировщик Go основан на модели M:N, где множество горутин (N) маппятся на меньшее или равное количество системных потоков (M). В основе лежит концепция трёх сущностей:

  • G (goroutine) — легковесный поток выполнения.
  • M (machine) — системный поток ОС.
  • P (processor) — логический процессор, который управляет выполнением горутин на M.

Каждый P имеет очередь готовых к выполнению горутин. M привязывается к P и выполняет горутины из его очереди. Планировщик балансирует нагрузку, переключает горутины, поддерживает preemption (прерывание горутин для справедливого распределения времени).

Настраивать планировщик вручную обычно не требуется, но можно влиять на его поведение через переменную окружения GOMAXPROCS, которая задаёт количество P (логических процессоров), доступных планировщику. Это позволяет контролировать уровень параллелизма.

Пример установки максимального количества логических процессоров:

import "runtime"

func main() {
    runtime.GOMAXPROCS(4) // ограничить параллелизм четырьмя потоками
    // ...
}

В редких случаях можно использовать runtime/debug для более тонкой настройки, но обычно встроенный планировщик достаточно эффективен и не требует вмешательства.