Как происходит исполнение горутин

«Как происходит исполнение горутин» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Горутины — это легковесные потоки, управляемые рантаймом Go. Они выполняются в контексте одного или нескольких системных потоков (M:N модель).

Особенности:

  • Запуск: go func() {...}
  • Планировщик Go распределяет горутины по потокам ОС
  • Блокирующие операции (I/O, каналы) не блокируют поток — планировщик переключается на другую горутину
  • Нет гарантии порядка выполнения

Пример:

func main() {
    go func() { fmt.Println("Goroutine 1") }()
    go func() { fmt.Println("Goroutine 2") }()
    time.Sleep(100 * time.Millisecond) // Ждём завершения (в реальном коде используйте sync.WaitGroup)
}

Важно: Горутины дешевле потоков (~2 КБ стека vs 1-8 МБ), но требуют синхронизации (каналы, мьютексы).