Junior — Middle
Ako nútene zastaviť viac bežiacich gorutín v Go?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa na nútené zastavenie viacerých bežiacich gorutín zvyčajne používa mechanizmus zrušenia cez kontext (context.Context).
Hlavná myšlienka:
- Vytvorí sa kontext s možnosťou zrušenia (
context.WithCancelalebocontext.WithTimeout). - Každá gorutina prijíma tento kontext a pravidelne kontroluje, či nebol zrušený.
- Pri volaní funkcie zrušenia (
cancel()) všetky gorutiny dostanú signál a môžu sa správne ukončiť.
Príklad:
ctx, cancel := context.WithCancel(context.Background())
for i := 0; i < 5; i++ {
go func(id int) {
for {
select {
case <-ctx.Done():
fmt.Printf("Gorutina %d zastavená\n", id)
return
default:
// práca gorutiny
time.Sleep(100 * time.Millisecond)
}
}
}(i)
}
// Po určitom čase zastavíme všetky gorutiny
time.Sleep(1 * time.Second)
cancel()
// Čakáme na ich ukončenie (napríklad pomocou sync.WaitGroup)
Tento prístup umožňuje centralizované riadenie zastavenia viacerých gorutín a vyhýba sa problémom s nekontrolovaným ukončením.