Sobes.tech
Junior — Middle

Kas on võimalik samaaegselt saada väärtusi ühest kanalist mitmes goroutines?

sobes.tech AI

Vastus AI-lt

Jah, mitu goroutine saab samaaegselt saada väärtusi ühest kanalist Go keeles. Kanalid Go-s toetavad mitmekordset lugemist ja kirjutamist, võimaldades mitmel goroutine'il lugeda sama kanalist paralleelselt.

Kuid oluline on märkida, et kui mitu goroutine'i loevad ühest kanalist, saab iga väärtuse ainult üks neist — väärtusi ei dubleerita. See on kasulik töö jaotamiseks goroutine'ide vahel (tööjõu bassein).

Näide:

ch := make(chan int)

// Käivitame mitu goroutine'i, mis loevad kanalist
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d sai %d\n", id, val)
        }
    }(i)
}

// Saadame andmeid kanalile
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

Selles näites jaotuvad kanalist saadud väärtused kolme goroutine'i vahel.