Sobes.tech
Back to questions
Middle+
3

Как работают горутины под капотом (модель GMP)?

Companies where asked
МВидеоМВидео

Answer from AI

sobes.tech AI

В Go горутины реализованы через модель GMP, где:

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

Работа модели:

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

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

Пример:

func main() {
    go func() {
        fmt.Println("Горутина работает")
    }()
    time.Sleep(time.Second) // Ждем завершения горутины
}