Ответ
В Go многопоточность работает с горутинами (goroutines) — легковесными потоками, управляемыми рантаймом Go. Они не являются потоками ОС, а работают поверх них (M:N модель).
Основные единицы:
- Горутина — функция, выполняющаяся конкурентно. Запускается через
go func(). - Каналы (channels) — механизм связи между горутинами (
chan). - Примитивы синхронизации из пакета
sync(Mutex, WaitGroup и т.д.).
Пример:
func main() {
ch := make(chan int)
go func() { ch <- 42 }() // горутина
fmt.Println(<-ch) // синхронизация через канал
}
Горутины дешевле потоков ОС (стек ~2 КБ, динамически растёт). Планировщик Go распределяет их по потокам ОС.