Ответ
В Go количество горутин, которые можно запустить параллельно, ограничено количеством потоков (GOMAXPROCS), доступных для планировщика. По умолчанию GOMAXPROCS равен количеству ядер CPU.
Горутины — это легковесные потоки, и их можно создавать миллионы, но реальная параллельность зависит от GOMAXPROCS. Например, на 4-ядерном CPU с GOMAXPROCS=4 до 4 горутин могут выполняться одновременно.
Пример:
runtime.GOMAXPROCS(4) // Устанавливаем 4 потока
for i := 0; i < 1_000_000; i++ {
go func() {
// Работа горутины
}()
}
Здесь создаётся миллион горутин, но одновременно выполняются только 4. Остальные ждут в очереди.