Sobes.tech
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.