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