Sobes.tech
Senior
24

Расскажи, как устроена работа планировщика горутин в Go (GMP)?

Компании, где спрашивали
Холодильник.руХолодильник.ру

Ответ от нейросети

sobes.tech AI

Планировщик горутин в Go основан на модели GMP (Goroutine, Machine, Processor).

  • G (Goroutine) — легковесный поток выполнения, который запускает пользовательский код.
  • M (Machine) — системный поток ОС, который выполняет горутины.
  • P (Processor) — логический процессор, который связывает M и G, управляет выполнением.

Работа планировщика:

  1. У каждого P есть очередь готовых к выполнению горутин (G).
  2. M привязывается к P, берет из его очереди G и выполняет их.
  3. Если горутина блокируется (например, на ввод/вывод), M освобождается и может взять другую P с готовыми горутинами.
  4. Планировщик балансирует нагрузку между P, чтобы максимально эффективно использовать системные потоки.

Это позволяет Go эффективно масштабировать большое количество горутин на ограниченное число системных потоков, обеспечивая высокую конкурентность с минимальными накладными расходами.

Пример создания горутины:

func main() {
    go func() {
        fmt.Println("Hello from goroutine")
    }()
    time.Sleep(time.Second) // Ждем, чтобы горутина успела выполниться
}