Junior — Middle
Ako možno kontrolovať počet aktívnych vlákien v aplikácii?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa na kontrolu počtu aktívnych vlákien (gorutín) zvyčajne používajú mechanizmy synchronizácie a obmedzenia paralelnosti:
-
Bufferované kanály ako semafory: vytvárajú kanál s obmedzenou kapacitou a pred spustením gorutiny do neho pošlú hodnotu, a po jej dokončení ju prijmú, čím obmedzia počet súčasne bežiacich gorutín.
-
Balík
sync.WaitGroup: pomáha čakať na dokončenie skupiny gorutín, ale ich počet neobmedzuje. -
Balík
golang.org/x/sync/semaphore: poskytuje pohodlný semafor na obmedzenie paralelnosti.
Príklad s použitím semaforového kanála:
sem := make(chan struct{}, 5) // maximálne 5 gorutín súčasne
for _, task := range tasks {
sem <- struct{}{} // blokuje, ak je už spustených 5 gorutín
go func(t Task) {
defer func() { <-sem }() // uvoľní miesto
process(t)
}(task)
}
// Čakáme, kým všetky gorutiny neskončia
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Týmto spôsobom je možné kontrolovať počet aktívnych vlákien a vyhnúť sa nadmernému využívaniu zdrojov.