Middle+
Qiziqarli yoki murakkab texnik vazifa haqida gapirib bering, uni siz hal qilgansiz
sobes.tech AI
AIdan javob
Go'da qiziqarli vazifalardan biri, bir nechta manbadan katta hajmdagi ma'lumotlarni parallel tarzda ishlashni optimallashtirish bilan bog'liq edi. Vazifalarni samarali taqsimlaydigan, ularning ustuvorligi va bog'liqliklarini hisobga oladigan, shuningdek, xatoliklar va bekor qilishlarni kontekstlar orqali to'g'ri boshqaradigan goroutine havuzini amalga oshirish kerak edi.
Buning uchun, vazifalar va natijalarni uzatish uchun kanallar, bekor qilish va vaqt chegaralari uchun kontekstlar, hamda barcha goroutine'larning yakunlanishini kutish uchun sync.WaitGroup dan foydalanardim. Natijada, tizimning ishlash tezligi va barqarorligi sezilarli darajada yaxshilandi.
Soddalashtirilgan kod misoli:
func worker(ctx context.Context, tasks <-chan Task, results chan<- Result) {
for {
select {
case <-ctx.Done():
return
case task, ok := <-tasks:
if !ok {
return
}
res := process(task)
results <- res
}
}
}