Sobes.tech
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.