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