Sobes.tech
Junior — Middle

Che qanday ishlaydi cheklangan kirish bilan kanalga yozish mexanizmi va bu jarayonda nima bo'ladi?

sobes.tech AI

AIdan javob

Go tilida, cheklangan sig‘imli kanal (bufferli kanal) doimiy hajmga ega bo‘lib, uning to‘liq hajmi belgilangan. chan <- value operatsiyasi bilan kanalga ma’lumot yozilganda, quyidagilar yuz beradi:

  • Agar kanalning bufferi bo‘sh joyga ega bo‘lsa, qiymat bufferga joylashtiriladi va yozish operatsiyasi darhol tugaydi.
  • Agar buffer to‘liq bo‘lsa, yozish operatsiyasi bloklanadi, to‘g‘ri kanaldan kimdir qiymat o‘qib olguncha, joy bo‘shatiladi.

Shu tarzda, cheklangan bufferli kanal goroutinlar o‘rtasida sinxronizatsiya ta’minlaydi: to‘ldirishda yozish bloklanadi, va bo‘sh bufferda o‘qish bloklanadi.

Misol:

ch := make(chan int, 2) // 2 ta elementli buffer

ch <- 1 // yozish, buffer: [1]
ch <- 2 // yozish, buffer: [1, 2]
// ch <- 3 // bloklanadi, buffer to‘liq

fmt.Println(<-ch) // 1 ni o‘qiydi, buffer: [2]
ch <- 3 // endi yozish muvaffaqiyatli bo‘ladi

Shu tarzda, cheklangan kirishli kanaldagi yozish mexanizmi ma’lumot oqimini nazorat qilish va bufferning to‘lib ketishini oldini olish imkonini beradi.