Sobes.tech
Back to questions
Senior
4

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

Companies where asked
SelectelSelectel

Answer from AI

sobes.tech AI

Горутины — это легковесные потоки исполнения в языке Go, которые управляются планировщиком внутри рантайма Go, а не операционной системой. Они позволяют запускать функции параллельно с минимальными затратами по памяти и времени на переключение контекста.

Отличия от потоков ОС:

  • Горутины гораздо легче по ресурсам (обычно стартуют с 2 КБ стека, который динамически растёт).
  • Планирование горутин происходит в пользовательском пространстве, а не ядром ОС.
  • Переключение между горутинами быстрее, чем между потоками ОС.

Планировщик Go основан на модели GMP:

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

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

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

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

go func() {
    fmt.Println("Hello from goroutine")
}()

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