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

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

В 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) // Ждем завершения горутины
}

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку