Ответ
В Go можно создавать неограниченное количество реплик (горутин), но их реальное количество ограничено ресурсами системы (память, CPU).
Пример:
package main
import (
"fmt"
"time"
)
func worker(id int) {
fmt.Printf("Worker %d startedn", id)
time.Sleep(time.Second)
fmt.Printf("Worker %d donen", id)
}
func main() {
for i := 0; i < 100000; i++ {
go worker(i) // Запуск 100k горутин
}
time.Sleep(2 * time.Second) // Даем время на выполнение
}
Нюансы:
- При слишком большом количестве горутин возможны утечки памяти и деградация производительности.
- Лучше использовать пулы воркеров (например,
sync.WaitGroup,semaphore.Weighted). - На практике десятки тысяч горутин уже могут создать нагрузку.