Sobes.tech
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.WaitGroup pakotne: palīdz gaidīt, līdz goroutine grupa beigs darbu, bet neierobežo to skaitu.

  • golang.org/x/sync/semaphore pakotne: 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.