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 арасында бөлүштүрүлөт.