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.