Sobes.tech
Back to questions
Middle+
6

Что такое горутины, как они устроены внутри?

Companies where asked
Магнум

Answer from AI

sobes.tech AI

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

Внутри горутина представлена структурой g (goroutine), которая содержит состояние, стек, регистры и другую информацию. Планировщик Go (scheduler) управляет переключением между горутинами, используя модель M:N, где M — системные потоки (OS threads), а N — горутины.

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

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

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

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