¿Cuál de las siguientes opciones es más probable que ocurra al intentar lanzar una gran cantidad de goroutines (por ejemplo, decenas de miles) sin control adicional? - El problema principal será causado por el bloqueo del mutex global dentro del runtime, lo que llevará a una parada completa de la ejecución del programa - El planificador de Go ejecutará las goroutines en pequeños grupos de manera secuencial, por lo que el aumento en su número casi no afectará el consumo de memoria - La creación masiva de goroutines puede llevar a un consumo significativo de memoria y a gastos adicionales del planificador; en tales casos, es apropiado usar un pool de workers - Si el número de goroutines supera el número de procesadores lógicos, Go comenzará automáticamente a rechazar nuevas ejecuciones de goroutines con un pánico
sobes.tech AI
Respuesta de la IA
Правильный ответ:
- Массовое порождение горутин может привести к значительному расходу памяти и накладным расходам планировщика; в таких случаях уместен пул воркеров
Объяснение:
Горутины в Go — это легковесные потоки, но они всё равно потребляют память (стек, структуры планировщика). При запуске десятков тысяч горутин без контроля может значительно вырасти потребление памяти и нагрузка на планировщик.
Go не блокирует глобальный mutex при планировании горутин, планировщик эффективно переключается между ними.
Планировщик не выполняет горутины строго последовательно малыми группами, а распределяет их по доступным логическим процессорам (GOMAXPROCS).
Go не отклоняет создание горутин с паникой при превышении их числа.
Поэтому при большом числе горутин рекомендуется использовать пул воркеров, чтобы ограничить количество одновременно активных горутин и снизить накладные расходы.