Middle — Middle+
Vysvětlete koncept použití vláknového poolu pro zpracování úkolů v vícevláknové aplikaci.
sobes.tech AI
Odpověď od AI
Pool pracovníků je mechanismus, který umožňuje omezit počet současně běžících vláken (gorutin v Go) pro zpracování úkolů. Místo vytváření nové gorutiny pro každý úkol jsou úkoly umístěny do fronty a pevný počet pracovníků (gorutin) je postupně zpracovává. To pomáhá kontrolovat využití zdrojů, vyhýbat se nadměrnému vytváření gorutin a zvyšovat výkon.
V Go lze pool implementovat pomocí kanálu úkolů a pevného počtu pracovníků gorutin, kteří čtou úkoly z kanálu a vykonávají je:
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
// zpracování úkolu j
results <- j * 2
}
}
func main() {
jobs := make(chan int, 100)
results := make(chan int, 100)
// Spouštíme 3 pracovníky
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
// Posíláme 5 úkolů
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
// Přijímáme výsledky
for a := 1; a <= 5; a++ {
fmt.Println(<-results)
}
}
Tento přístup umožňuje efektivně řídit paralelismus a zdroje aplikace.