Sobes.tech
Junior — Middle

Оё имкон дорад, ки паёмҳоро ба як канал бо чанд гурутин ҳамзамон фиристод?

sobes.tech AI

Ҷавоб аз AI

Այո, Go-ում թույլատրվում է միաժամանակ մի քանի goroutine-ներից ուղարկել հաղորդագրություններ դեպի մի ալիք։ Go-ի ալիքները անվտանգ են հոսքերի համար և ապահովում են սինխրոնիզացիա goroutine-ների միջև:

Սակայն, կարևոր է հիշել՝

  • Եթե մի քանի goroutine-ներ գրում են նույն ալիքին և ոչ ոք այն չի կարդում, դա կհանգեցնի բլոկավորմանը։
  • Եթե ալիքը բուֆերային է, գրառումները կբլոկվեն միայն այն ժամանակ, երբ բուֆերը լցվի։
  • Պետք է զգուշորեն կառավարել ալիքի փակումը՝ միայն ուղարկողը պետք է այն փակել, և միայն այն ժամանակ, երբ վստահ է, որ այլ գրառումներ չեն լինելու։

Օրինակ՝

ch := make(chan int)

// Շատ goroutine-ներ գործարկել, որոնք ուղարկում են տվյալներ ալիքին
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Կարդալ ալիքից
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

Այսպիսով, միաժամանակ ուղարկել ալիքին մի քանի goroutine-ներից՝ դա ստանդարտ պրակտիկա է Go-ում։