Sobes.tech
Middle

Go tilida kanal nima? Qanday turlaridagi kanallar mavjud? Bufferlangan va bufferlanmagan kanallar qanday farq qiladi?

sobes.tech AI

AIdan javob

Go tilida kanal — bu, goroutine'lar o'rtasida qiymatlarni uzatish uchun ishlatiladigan ma'lumot turi bo'lib, sinxronizatsiya va ma'lumot almashishni ta'minlaydi.

Kanal turlari:

  • Buzilmagan kanallar — ichki buferga ega emas, yuborish, qabul qiluvchi qiymatni o'qigunga qadar bloklanadi.
  • Buferli kanallar — belgilangan o'lchamdagi ichki buferga ega, va yuborish faqat bufer to'lib qolganida bloklanadi.

Farqlar:

  • Buzilmagan kanallarda, yuboruvchi va qabul qiluvchi bir vaqtda tayyor bo'lishi kerak, bu qat'iy sinxronizatsiya ta'minlaydi.
  • Buferli kanallarda, yuboruvchi, bufer to'lib qolmasdan, bir nechta qiymatni joylashtirishi mumkin, qabul qiluvchi kutmasdan.

Misol uchun, buferli kanal yaratish va foydalanish:

ch := make(chan int, 2) // 2 ta elementli bufer
ch <- 1
ch <- 2
// ch <- 3 // to'lib qolganida bloklanadi
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2