Junior — Middle
Jak można kontrolować liczbę aktywnych wątków w aplikacji?
sobes.tech AI
Odpowiedź od AI
W Go, aby kontrolować liczbę aktywnych wątków (gorutyn), zwykle używa się mechanizmów synchronizacji i ograniczania paralelizmu:
-
Buforowane kanały jako semafory: tworzą kanał o ograniczonej pojemności i przed uruchomieniem gorutyny wysyłają do niego wartość, a po zakończeniu odbierają, tym samym ograniczając liczbę jednocześnie działających gorutyn.
-
Pakiet
sync.WaitGroup: pomaga czekać na zakończenie grupy gorutyn, ale nie ogranicza ich liczby. -
Pakiet
golang.org/x/sync/semaphore: zapewnia wygodny semafor do ograniczania paralelizmu.
Przykład z użyciem kanału-semafora:
sem := make(chan struct{}, 5) // maksymalnie 5 gorutyn jednocześnie
for _, task := range tasks {
sem <- struct{}{} // blokuje, jeśli 5 gorutyn już uruchomionych
go func(t Task) {
defer func() { <-sem }() // zwalnia miejsce
process(t)
}(task)
}
// Czekamy, aż wszystkie gorutyny się zakończą
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
W ten sposób można kontrolować liczbę aktywnych wątków i unikać nadmiernego zużycia zasobów.