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