Sobes.tech
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.