Junior — Middle
Lze stanovit limit na počet současně spuštěných gorutin v programu?
sobes.tech AI
Odpověď od AI
V jazyce Go neexistuje vestavěný mechanismus pro nastavení pevného limitu počtu současně spuštěných gorutin. Může jich být velmi mnoho a jejich plánování a přepínání zajišťuje běhové prostředí Go.
Pokud však chcete omezit počet gorutin, které se současně vykonávají (například pro kontrolu využití zdrojů), můžete použít semafory nebo kanály k omezení paralelismu.
Příklad omezení počtu současně pracujících gorutin pomocí kanálu:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // získání zdroje
fmt.Printf("Goroutine %d začala pracovat\n", id)
// ... práce ...
fmt.Printf("Goroutine %d dokončila práci\n", id)
<-sem // uvolnění zdroje
}
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 příkladu nebude současně pracovat více než 5 gorutin.