Junior — Middle
Bir kanaldan bir nechta goroutine'lar bir vaqtning o'zida qiymat olishi mumkinmi?
sobes.tech AI
AIdan javob
Ha, bir nechta goroutin bir vaqtning o'zida Go'da bir kanaldan qiymat olishi mumkin. Kanallar Go'da ko'p o'qish va yozishni qo'llab-quvvatlaydi, bu esa bir nechta goroutinlarning bir kanaldan parallel ravishda o'qishiga imkon beradi.
Biroq, muhim bo'lsa, agar bir nechta goroutinlar bir kanaldan o'qiyotgan bo'lsa, har bir qiymat faqat ularning biriga yetib boradi — qiymatlar takrorlanmaydi. Bu goroutinlar orasida ishni taqsimlash uchun qulay (ishchi havuz).
Misol:
ch := make(chan int)
// Bir nechta goroutinlarni ishga tushiramiz, ular kanaldan o'qiydi
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d %d ni oldi\n", id, val)
}
}(i)
}
// Kanalga ma'lumot yuboramiz
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
Ushbu misolda, kanaldan olingan qiymatlar uchta goroutine o'rtasida taqsimlanadi.