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-ում։