Ответ
В Go нет потоков в классическом понимании, есть горутины (goroutines). Они легковесны (2-4 КБ стека) и управляются рантаймом.
При запуске 10к горутин:
- Они создадутся быстро (намного быстрее, чем системные потоки)
- Будут выполняться конкурентно, но не обязательно параллельно (зависит от GOMAXPROCS)
- Потребляют меньше памяти, чем потоки ОС
- Блокирующие операции (ввод/вывод) не блокируют потоки ОС благодаря неблокирующему IO и планировщику
Пример:
func main() {
for i := 0; i < 10000; i++ {
go func(n int) {
fmt.Println(n)
}(i)
}
time.Sleep(time.Second) // Даём время на выполнение
}
Проблемы могут возникнуть при:
- Утечке горутин (если они не завершаются)
- Чрезмерном потреблении CPU при активных вычислениях
- Конкуренции за общие ресурсы (нужны sync примитивы)