Back to questions
Касперский
Junior — Middle
87
Каким образом можно контролировать число активных потоков в приложении?
Companies where asked
Answer from AI
sobes.tech AI
В Go для контроля числа активных потоков (горутины) обычно используют механизмы синхронизации и ограничения параллелизма:
-
Буферизированные каналы как семафоры: создают канал с ограниченной емкостью и перед запуском горутины отправляют туда значение, а после завершения — принимают, тем самым ограничивая число одновременно работающих горутин.
-
Пакет
sync.WaitGroup: помогает ждать завершения группы горутин, но не ограничивает их число. -
Пакет
golang.org/x/sync/semaphore: предоставляет удобный семафор для ограничения параллелизма.
Пример с использованием канала-семафора:
sem := make(chan struct{}, 5) // максимум 5 горутин одновременно
for _, task := range tasks {
sem <- struct{}{} // блокирует, если 5 горутин уже запущено
go func(t Task) {
defer func() { <-sem }() // освобождаем слот
process(t)
}(task)
}
// Ждем пока все горутины завершатся
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Таким образом можно контролировать число активных потоков и избегать чрезмерного потребления ресурсов.