Ответ
Горутины — это легковесные потоки, управляемые рантаймом Go. Они выполняются в контексте одного или нескольких системных потоков (M:N модель).
Особенности:
- Запуск:
go func() {...} - Планировщик Go распределяет горутины по потокам ОС
- Блокирующие операции (I/O, каналы) не блокируют поток — планировщик переключается на другую горутину
- Нет гарантии порядка выполнения
Пример:
func main() {
go func() { fmt.Println("Goroutine 1") }()
go func() { fmt.Println("Goroutine 2") }()
time.Sleep(100 * time.Millisecond) // Ждём завершения (в реальном коде используйте sync.WaitGroup)
}
Важно: Горутины дешевле потоков (~2 КБ стека vs 1-8 МБ), но требуют синхронизации (каналы, мьютексы).