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-ների միջև։