Sobes.tech
Back to questions
Senior
4

Что такое горутина? Как она устроена?

Companies where asked
Магнит Тех

Answer from AI

sobes.tech AI

Горутина — это легковесный поток выполнения в языке Go. В отличие от системных потоков, горутины управляются рантаймом Go и имеют очень маленький стек (начинается с нескольких килобайт и может динамически расти). Это позволяет запускать сотни тысяч горутин одновременно с низкими накладными расходами.

Устройство горутины:

  • При создании горутины (оператор go) планировщик Go помещает её в очередь готовых к выполнению задач.
  • Рантайм Go использует M:N планирование: M системных потоков (OS threads) обслуживают N горутин.
  • Горутины переключаются на уровне рантайма, что быстрее, чем переключение системных потоков.
  • Каждый поток (M) может выполнять несколько горутин (N), переключаясь между ними при блокировках или по необходимости.

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

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

func main() {
    go sayHello() // запускаем горутину
    time.Sleep(time.Second) // ждем, чтобы горутина успела выполниться
}