Sobes.tech
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 // эми жибере алат, орун бар

Мындайча айтканда, буферленген каналдар убакытча маалымат сактоого мүмкүндүк берет жана горутиндер арасындагы блоктоолорду азайтат.