Junior — Middle
Qanday qilib buferlangan kanal orqali o'zaro ta'sir amalga oshiriladi va ma'lumotlar qanday uzatiladi?
sobes.tech AI
AIdan javob
Go til, bufferdan kanal yaratish uchun uning o'lchamini ko'rsatish kerak, masalan: ch := make(chan int, 3). Bu kanal bloklamasdan 3 ta element saqlay oladi.
Bufferli kanal orqali ma'lumot uzatishda:
- Yuboruvchi (
chan <- value) qiymatni kanalning bufferiga joylashtiradi. Agar buffer to'liq bo'lmasa, operatsiya bloklamaydi. - Agar buffer to'liq bo'lsa, yuboruvchi joy bo'shaguncha bloklanadi.
- Qabul qiluvchi (
value := <- chan) qiymatni bufferdan oladi. Agar buffer bo'sh bo'lsa, qabul qiluvchi ma'lumot kelguncha bloklanadi.
Misol:
ch := make(chan int, 2)
ch <- 1 // bloklamaydi, bufferda 1 ta element
ch <- 2 // bloklamaydi, bufferda 2 ta element (to'liq buffer)
fmt.Println(<-ch) // 1 ni chiqaradi, bufferda joy bo'shadi
ch <- 3 // endi yuborish mumkin, joy bor
Shu tarzda, bufferli kanallar vaqtinchalik ma'lumot saqlashga imkon beradi va gorutinalar o'rtasidagi bloklamalarni kamaytiradi.