Sobes.tech
Intern

Qual das seguintes opções é mais provável de acontecer ao tentar lançar um grande número de goroutines (por exemplo, dezenas de milhares) sem controlo adicional? - O problema principal será causado pelo bloqueio do mutex global dentro do runtime, o que levará a uma paragem completa da execução do programa - O agendador do Go executará as goroutines em pequenos grupos de forma sequencial, portanto, o aumento do seu número quase não afetará o consumo de memória - A criação massiva de goroutines pode levar a um consumo significativo de memória e a custos adicionais do agendador; nesses casos, é adequado usar um pool de workers - Se o número de goroutines exceder o número de processadores lógicos, o Go começará automaticamente a rejeitar novas execuções de goroutines com um pânico

sobes.tech IA

Resposta da IA

Правильный ответ:

  • Массовое порождение горутин может привести к значительному расходу памяти и накладным расходам планировщика; в таких случаях уместен пул воркеров

Объяснение:

Горутины в Go — это легковесные потоки, но они всё равно потребляют память (стек, структуры планировщика). При запуске десятков тысяч горутин без контроля может значительно вырасти потребление памяти и нагрузка на планировщик.

Go не блокирует глобальный mutex при планировании горутин, планировщик эффективно переключается между ними.

Планировщик не выполняет горутины строго последовательно малыми группами, а распределяет их по доступным логическим процессорам (GOMAXPROCS).

Go не отклоняет создание горутин с паникой при превышении их числа.

Поэтому при большом числе горутин рекомендуется использовать пул воркеров, чтобы ограничить количество одновременно активных горутин и снизить накладные расходы.