for i := 0; i < 50; i++ {
go func() {
DoRequest()
}()
time.Sleep(10 * time.Millisecond)
}
Никогда не создавайте подобные подпрограммы.Всегда убедитесь, что вы создаете подпрограммы так, чтобы они ни в коем случае не заполняли большую (всю) память (включая наихудший случай)
Простым решением является контроль количества подпрограмм, которые могут порождаться (или выполняться) одновременно..
Вы можете предварительно рассчитать занятость памяти в худшем случае, умножив максимальное число подпрограмм, которые вы хотите запускать за раз, и max-memory можно использовать одной подпрограммой.
Вы можете управлять экземплярами подпрограмм с помощью каналов.
Обратитесь к первому ответу на этот вопрос stackoverflow Всегда иметь x число выполняющихся процедур в любомвремя
Всегда используйте сбалансированное решение между производительностью и требуемыми ресурсами.
Обновление от июня 11,2019
ЗдесьЭто пример программы go https://play.golang.org/p/HovNRgp6FxH