Junior — Middle
Jak lze kontrolovat počet aktivních vláken v aplikaci?
sobes.tech AI
Odpověď od AI
V jazyce Go se obvykle pro kontrolu počtu aktivních vláken (gorutin) používají mechanismy synchronizace a omezení paralelismu:
-
Bufferované kanály jako semafory: vytvářejí kanál s omezenou kapacitou a před spuštěním gorutiny do něj pošlou hodnotu, a po jejím dokončení ji přijmou, čímž omezí počet současně běžících gorutin.
-
Balíček
sync.WaitGroup: pomáhá čekat na dokončení skupiny gorutin, ale jejich počet neomezuje. -
Balíček
golang.org/x/sync/semaphore: poskytuje pohodlný semafor pro omezení paralelismu.
Příklad s použitím semaforového kanálu:
sem := make(chan struct{}, 5) // maximálně 5 gorutin současně
for _, task := range tasks {
sem <- struct{}{} // blokuje, pokud je již spuštěno 5 gorutin
go func(t Task) {
defer func() { <-sem }() // uvolní místo
process(t)
}(task)
}
// Čekáme, až všechny gorutiny dokončí
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Tímto způsobem lze kontrolovat počet aktivních vláken a vyhnout se nadměrnému využívání zdrojů.