Sobes.tech
Junior — Middle

Bir kanaldan aynı anda birden fazla goroutine'den değerler alınabilir mi?

sobes.tech yapay zeka

AI'dan gelen yanıt

Evet, birkaç goroutine aynı anda Go'da bir kanaldan değer alabilir. Kanallar, çoklu okuma ve yazma desteği sağlar, bu da birkaç goroutine'un aynı kanaldan paralel olarak okuyabilmesine olanak tanır.

Ancak, birkaç goroutine aynı kanaldan okursa, her değer yalnızca bunlardan biri tarafından alınır — değerler çoğaltılmaz. Bu, iş dağıtımı için kullanışlıdır (işçi havuzu).

Örnek:

ch := make(chan int)

// Kanaldan okuyan birkaç goroutine başlat
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 veri gönder
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

Bu örnekte, kanaldaki değerler üç goroutine arasında dağıtılır.