Ответ
Горутины легковесны (2–8 КБ стека) и работают поверх потоков ОС (M:N модель).
Плюсы:
- Создаются быстро (нет накладных расходов на системные вызовы).
- Переключение между ними дешевле, чем у потоков (пользовательский планировщик Go).
- Масштабируются на тысячи параллельных задач без нагрузки на ОС.
Пример:
func main() {
for i := 0; i < 1000; i++ {
go func(id int) {
fmt.Println("Goroutine", id)
}(i)
}
time.Sleep(time.Second) // Даём время на вывод
}
Нюанс: если горутины блокируются (I/O, мьютексы), эффективность падает.