Назад к вопросам
Senior
3
Что такое горутина? Как она устроена?
Компании, где спрашивали
Магнит Тех
Ответ от нейросети
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) // ждем, чтобы горутина успела выполниться
}