Sobes.tech
Intern

Które z poniższych jest najbardziej prawdopodobne podczas próby uruchomienia bardzo dużej liczby goroutine (np. dziesiątek tysięcy) bez dodatkowej kontroli? - Głównym problemem będzie zablokowanie globalnego mutexa w runtime, co doprowadzi do całkowitego zatrzymania działania programu - Planista Go będzie wykonywał goroutine w małych grupach sekwencyjnie, więc wzrost ich liczby prawie nie wpłynie na zużycie pamięci - Masowe tworzenie goroutine może prowadzić do znacznego zużycia pamięci i narzutu planisty; w takich przypadkach odpowiedni jest pul pracowników - Jeśli liczba goroutine przekracza liczbę procesorów logicznych, Go automatycznie zacznie odrzucać nowe uruchomienia goroutine z paniką

sobes.tech AI

Odpowiedź od AI

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

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

Объяснение:

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

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

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

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

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