Sobes.tech
Junior — Middle

Bir kanaldan eyni zamanda bir neçə goroutine-dən dəyərlər almaq mümkündürmü?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, bir neçə goroutine eyni zamanda Go-da bir kanaldan dəyərlər ala bilər. Kanallar Go-da çoxsaylı oxuma və yazma əməliyyatlarını dəstəkləyir, bu da bir neçə goroutine-un eyni kanaldan paralel oxumağa imkan verir.

Ancaq vacibdir ki, əgər bir neçə goroutine eyni kanaldan oxuyursa, hər bir dəyər yalnız birinə çatacaq — dəyərlər təkrarlanmır. Bu, goroutine-lər arasında işi bölüşdürmək üçün faydalıdır (işçi hovuzu).

Misal:

ch := make(chan int)

// Bir neçə goroutine-u işə salırıq, onlar kanaldan oxuyur
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d %d aldı\n", id, val)
        }
    }(i)
}

// Kanala məlumat göndəririk
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

Bu nümunədə, kanaldan alınan dəyərlər üç goroutine arasında paylanır.