Ответ
Горутины — это легковесные потоки выполнения в Go, управляемые рантаймом, а не ОС. Они работают в рамках одного системного потока (по умолчанию), потребляют меньше памяти (~2 КБ стека) и быстро переключаются.
Потоки (threads) — это тяжеловесные сущности ОС, занимают больше памяти (~1 МБ стека) и создаются/управляются ядром.
Пример:
func main() {
go func() { fmt.Println("Горутина") }() // Легковесная
time.Sleep(time.Millisecond)
}
Ключевые отличия:
- Горутины дешевле создавать и переключать.
- Горутины работают в рамках M:N потоков (много горутин на мало потоков).
- Горутины используют каналы для безопасной коммуникации, потоки — мьютексы.