Junior — Middle
Kā var kontrolēt aktīvo plūsmu skaitu lietojprogrammā?
sobes.tech AI
Atbilde no AI
Go valodā parasti aktīvo pavedienu (goroutine) skaitu kontrolē izmanto sinhronizācijas un paralēlismu ierobežojo mehānismus:
-
Buferēti kanāli kā semafori: izveido kanālu ar ierobežotu ietilpību un pirms goroutine uzsākšanas tajā nosūta vērtību, bet pēc tās pabeigšanas saņem to, tādējādi ierobežojot vienlaicīgi darbojošo goroutine skaitu.
-
sync.WaitGrouppakotne: palīdz gaidīt, līdz goroutine grupa beigs darbu, bet neierobežo to skaitu. -
golang.org/x/sync/semaphorepakotne: nodrošina ērtu semaforu paralēlismu ierobežošanai.
Piemērs ar semafora kanāla izmantošanu:
sem := make(chan struct{}, 5) // maksimāli 5 goroutine vienlaicīgi
for _, task := range tasks {
sem <- struct{}{} // bloķē, ja jau ir iesaistītas 5 goroutines
go func(t Task) {
defer func() { <-sem }() // atbrīvo vietu
process(t)
}(task)
}
// gaidām, līdz visas goroutine beigs darbu
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Šādi var kontrolēt aktīvo pavedienu skaitu un izvairīties no resursu pārmērīgas izmantošanas.