Junior — Middle
Буферленген канал аркылуу өз ара аракеттенүү кандайча ишке ашырылат жана маалыматтар кандайча өткөрүлөт?
sobes.tech AI
AIден жооп
Goда, буферленген канал түзүү үчүн анын өлчөмүн көрсөтүү керек, мисалы: ch := make(chan int, 3). Бул канал блоктогон жок, 3 элементке чейин сактай алат.
Буферленген канал аркылуу маалымат берүүдө:
- Жөнөтүүчү (
chan <- value) маанини каналдын буферине коёт. Эгер буфер толбой турган болсо, операция блоктогон эмес. - Эгер буфер толгон болсо, жөнөтүүчү орун бошотулгуча блоктогон болот.
- Алып жаткан (
value := <- chan) маанини буферден чыгарат. Эгер буфер бош болсо, ал блоктогон болот, маалымат келгенче күтөт.
Мисал:
ch := make(chan int, 2)
ch <- 1 // блоктогон эмес, буферде 1 элемент бар
ch <- 2 // блоктогон эмес, буферде 2 элемент бар (толгон буфер)
fmt.Println(<-ch) // 1 чыгарат, буферде орун бошотулат
ch <- 3 // эми жибере алат, орун бар
Мындайча айтканда, буферленген каналдар убакытча маалымат сактоого мүмкүндүк берет жана горутиндер арасындагы блоктоолорду азайтат.