Sobes.tech
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.