Junior — Middle
Ar galima vienu metu gauti reikšmes iš vieno kanalo keliuose goroutine?
sobes.tech AI
Atsakymas iš AI
Taip, keli gorutin gali vienu metu gauti reikšmes iš vieno kanalo Go kalboje. Kanalai Go palaiko daugybinį skaitymą ir rašymą, leidžiantį kelioms gorutinoms vienu metu skaityti iš to paties kanalo.
Tačiau svarbu atkreipti dėmesį, kad jei keli gorutinai skaito iš to paties kanalo, kiekviena reikšmė bus gauta tik viena iš jų — reikšmės nėra dubliuojamos. Tai naudinga darbo paskirstymui tarp gorutinų (darbo baseinas).
Pavyzdys:
ch := make(chan int)
// Pradėti kelias gorutinas, kurios skaito iš kanalo
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d gavo %d\n", id, val)
}
}(i)
}
// Siųsti duomenis į kanalą
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
Šiame pavyzdyje, reikšmės iš kanalo paskirstomos tarp trijų gorutinų.