Junior — Middle
Kā piespiedu kārtā apturēt vairākas darbojošās goroutines Go valodā?
sobes.tech AI
Atbilde no AI
Go valodā bieži izmanto mehānismu, kas ļauj piespiedu kārtā apturēt vairākas darbojošās gorutīnas, izmantojot konteksta (context.Context) atcelšanas mehānismu.
Galvenā ideja:
- Tiek izveidots atcelšanas konteksts (
context.WithCancelvaicontext.WithTimeout). - Katra gorutina saņem šo kontekstu un periodiski pārbauda, vai tas nav atcelts.
- Kad tiek izsaukta atcelšanas funkcija (
cancel()), visas gorutinas saņem signālu un var pareizi beigt darbu.
Piemērs:
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 apturēta\n", id)
return
default:
// gorutinas darbs
time.Sleep(100 * time.Millisecond)
}
}
}(i)
}
// Pēc kāda laika apturam visas gorutinas
time.Sleep(1 * time.Second)
cancel()
// Gaidām, līdz tās pabeigs darbu (piemēram, ar sync.WaitGroup)
Šī pieeja ļauj centralizēti pārvaldīt vairākas gorutinas un izvairīties no nekontrolēta beigu problēmām.