Junior — Middle
როგორ შეიძლება ძალით შეჩერდეს რამდენიმე მუშაობა გორუტინა Go-ში?
sobes.tech AI
პასუხი AI-სგან
Go ენაში, რამდენიმე მუშაობა გორუტინის ძალით შეჩერებისთვის ჩვეულებრივ გამოიყენება კონტექსტის (context.Context) მეშვეობით გაუქმების მექანიზმი.
ძირითადი იდეა:
- შექმნათ გაუქმების კონტექსტი (
context.WithCancelანcontext.WithTimeout). - თითოეული გორუტინა იღებს ამ კონტექსტს და პერიოდულად ამოწმებს, არ გაუქმებულა.
- როდესაც გამოიძახება გაუქმების ფუნქცია (
cancel()), ყველა გორუტინა მიიღებს სიგნალს და შეძლებს სწორად დასრულებას.
მაგალითი:
ctx, cancel := context.WithCancel(context.Background())
for i := 0; i < 5; i++ {
go func(id int) {
for {
select {
case <-ctx.Done():
fmt.Printf("Goroutine %d შეჩერებულია\n", id)
return
default:
// გორუტინის სამუშაო
time.Sleep(100 * time.Millisecond)
}
}
}(i)
}
// გარკვეული დროის შემდეგ ყველა გორუტინა შეჩერება
time.Sleep(1 * time.Second)
cancel()
// ველით მათი დასრულებას (მაგალითად, sync.WaitGroup-ის გამოყენებით)
ეს მიდგომა საშუალებას აძლევს ცენტრალიზებულად მართოს რამდენიმე გორუტინის შეჩერება და თავიდან აიცილოს კონტროლირებადი დასრულების პრობლემები.