Junior — Middle
Je možné súčasne získavať hodnoty z jedného kanála v niekoľkých gorutinách?
sobes.tech AI
Odpoveď od AI
Áno, niekoľko gorutín môže súčasne prijímať hodnoty z jedného kanála v Go. Kanály v Go podporujú viacnásobné čítanie a zápis, čo umožňuje viacerým gorutinám čítať z toho istého kanála paralelne.
Je však dôležité poznamenať, že ak niekoľko gorutín číta z toho istého kanála, každá hodnota bude prijatá iba jednou z nich — hodnoty sa nekopírujú. Toto je užitočné na rozdeľovanie práce medzi gorutinami (pracovný pool).
Príklad:
ch := make(chan int)
// Spúšťame niekoľko gorutín, ktoré čítajú z kanála
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d dostala %d\n", id, val)
}
}(i)
}
// Posielame dáta do kanála
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
V tomto príklade sú hodnoty z kanála rozdelené medzi tri gorutiny.