Sobes.tech
Intern

Care dintre următoarele opțiuni este cel mai probabil să se întâmple atunci când încerci să lansezi un număr foarte mare de goroutines (de exemplu, zeci de mii) fără control suplimentar? - Problema principală va fi cauzată de blocarea mutex-ului global din runtime, ceea ce va duce la oprirea completă a execuției programului - Planificatorul Go va executa goroutine-urile în grupuri mici în mod secvențial, astfel creșterea numărului lor aproape că nu va afecta consumul de memorie - Crearea masivă de goroutine poate duce la un consum semnificativ de memorie și la costuri suplimentare ale planificatorului; în astfel de cazuri, un pool de workeri este adecvat - Dacă numărul de goroutine depășește numărul procesoarelor logice, Go va începe automat să respingă noile lansări de goroutine cu un panic

sobes.tech AI

Răspuns de la AI

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

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

Объяснение:

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

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

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

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

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