Junior — Middle
Je možné nastaviť limit na počet súčasne spustených gorútín v programe?
sobes.tech AI
Odpoveď od AI
V jazyku Go neexistuje zabudovaný mechanizmus na nastavenie pevného limitu počtu súčasne spustených gorutín. Môže ich byť veľmi veľa a ich plánovanie a prepínanie zabezpečuje runtime Go.
Ak však chcete obmedziť počet gorutín, ktoré sa vykonávajú súčasne (napríklad na kontrolu využívania zdrojov), môžete použiť semafory alebo kanály na obmedzenie paralelizmu.
Príklad obmedzenia počtu súčasne pracujúcich gorutín pomocou kanála:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // získanie zdroja
fmt.Printf("Gorutina %d začala pracovať\n", id)
// ... práca ...
fmt.Printf("Gorutina %d ukončila prácu\n", id)
<-sem // uvoľnenie zdroja
}
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()
}
V tomto príklade nebude pracovať viac ako 5 gorutín súčasne.