Junior — Middle
Cum se poate controla numărul de fire active într-o aplicație?
sobes.tech AI
Răspuns de la AI
În Go, pentru a controla numărul de fire active (goroutines), se folosesc de obicei mecanisme de sincronizare și limitare a paralelismului:
-
Canale tamponate ca semafoare: creează un canal cu capacitate limitată și, înainte de a porni o goroutine, trimit o valoare în el, iar după finalizare, primește o valoare, limitând astfel numărul de goroutines care rulează simultan.
-
Pachetul
sync.WaitGroup: ajută la așteptarea finalizării unui grup de goroutines, dar nu limitează numărul lor. -
Pachetul
golang.org/x/sync/semaphore: oferă un semafor convenabil pentru limitarea paralelismului.
Exemplu cu un canal semafor:
sem := make(chan struct{}, 5) // maximum 5 goroutines simultan
for _, task := range tasks {
sem <- struct{}{} // blochează dacă deja sunt 5 goroutines în execuție
go func(t Task) {
defer func() { <-sem }() // eliberează slotul
process(t)
}(task)
}
// Așteaptă până când toate goroutine-urile se termină
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Astfel, se poate controla numărul de fire active și se evită consumul excesiv de resurse.