Назад к вопросам
Junior — Middle
77
Можно ли установить предел на число одновременно запущенных горутин в программе?
Компании, где спрашивали
Betera Group
Ответ от нейросети
sobes.tech AI
В языке Go нет встроенного механизма для установки жёсткого предела на количество одновременно запущенных горутин. Горутин может быть очень много, и их планирование и переключение осуществляет рантайм Go.
Однако, если нужно ограничить число одновременно выполняющихся горутин (например, для контроля использования ресурсов), можно использовать семафоры или каналы для ограничения параллелизма.
Пример ограничения числа одновременно работающих горутин с помощью канала:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // захват ресурса
fmt.Printf("Горутина %d начала работу\n", id)
// ... работа ...
fmt.Printf("Горутина %d завершила работу\n", id)
<-sem // освобождение ресурса
}
func main() {
const maxGoroutines = 5
sem := make(chan struct{}, maxGoroutines)
var wg sync.WaitGroup
for i := 0; i < 20; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
В этом примере одновременно будет работать не более 5 горутин.