Sobes.tech
Junior — Middle

Оё имкон дорад, ки арзишҳоро аз як канали дар як вақт дар чанд goroutine гирем?

sobes.tech AI

Ҷавоб аз AI

Бале, чанд гуруҳҳои goroutine метавонанд ҳамзамон аз як канали дар Go арзиш гиранд. Каналҳо дар Go дастгирӣ мекунанд, ки чандин хондан ва навишт анҷом дода шавад, ки имкон медиҳад чанд гуруҳҳои goroutine аз як канал дар параллел хонанд.

Бо вуҷуди ин, муҳим аст, ки ба назар гирифта шавад, ки агар чанд гуруҳҳои goroutine аз як канал хонанд, ҳар арзиш танҳо аз ҷониби яке аз онҳо қабул карда мешавад — арзишҳо такрор намешаванд. Ин барои тақсим кардани кор байни goroutineҳо (пул коргарон) муфид аст.

Масалан:

ch := make(chan int)

// Идора кардани чанд гуруҳҳои goroutine, ки аз канал мехонанд
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Гуруҳи goroutine %d гирифт %d\n", id, val)
        }
    }(i)
}

// Ирсол кардани маълумот ба канал
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

Дар ин мисол, арзишҳо аз канал байни се goroutine тақсим мешаванд.