Что такое горутины, как они устроены внутри?
Ответ от нейросети
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) // даём время горутине выполниться
}