GoDasturchi
Buffered Channels: Adding Capacity

Buffered Channels: Adding Capacity

Buferlangan kanallar: sig'im qo'shish

Oddiy make(chan int) — sig'imi noldagi, buferlanmagan kanal: yuborish darhol qabul qiluvchini talab qiladi. make(chan int, N) esa buferlangan kanal yaratadi — u navbat kabi ishlaydi va hech kim qabul qilmasa ham N tagacha qiymatni saqlab turishi mumkin.

example.go
ch := make(chan int, 3)
ch <- 1  // bloklanmaydi — buferda joy bor
ch <- 2  // bloklanmaydi
ch <- 3  // bloklanmaydi, endi bufer to'ldi
// ch <- 4 shu yerda bloklanardi — biror kishi qabul qilguncha

Bu — Composite Types kursidagi slice'ning cap (sig'im) tushunchasiga o'xshaydi: bufer — kanal ichidagi vaqtinchalik "joy". Bufer to'lgandan keyingi har qanday yuborish, qandaydir qiymat qabul qilinib bo'shliq ochilguncha kutadi.

>_ Exercise

FillBuffer(n int) []int funksiyasini yozing. n sig'imli buferlangan kanal yarating, 0 dan n-1 gacha bo'lgan har bir i uchun uning kvadratini kanalga yuboring (goroutinasiz — bufer yetarli bo'lgani uchun bloklanish bo'lmaydi), kanalni yoping, so'ngra range bilan barcha qiymatlarni slice'ga yig'ib qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Buferlangan kanal (make(chan T, N)) yuboruvchiga qabul qiluvchini kutmasdan N tagacha qiymatni "navbatga qo'yish" imkonini beradi. Bufer to'lgach, yuborish yana buferlanmagan kanaldagidek bloklanadigan bo'lib qoladi.

NEXT UP

Channel Directions: Send-Only and Receive-Only

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Buffered Channels: Adding Capacity

Buferlangan kanallar: sig'im qo'shish

Oddiy make(chan int) — sig'imi noldagi, buferlanmagan kanal: yuborish darhol qabul qiluvchini talab qiladi. make(chan int, N) esa buferlangan kanal yaratadi — u navbat kabi ishlaydi va hech kim qabul qilmasa ham N tagacha qiymatni saqlab turishi mumkin.

example.go
ch := make(chan int, 3)
ch <- 1  // bloklanmaydi — buferda joy bor
ch <- 2  // bloklanmaydi
ch <- 3  // bloklanmaydi, endi bufer to'ldi
// ch <- 4 shu yerda bloklanardi — biror kishi qabul qilguncha

Bu — Composite Types kursidagi slice'ning cap (sig'im) tushunchasiga o'xshaydi: bufer — kanal ichidagi vaqtinchalik "joy". Bufer to'lgandan keyingi har qanday yuborish, qandaydir qiymat qabul qilinib bo'shliq ochilguncha kutadi.

>_ Exercise

FillBuffer(n int) []int funksiyasini yozing. n sig'imli buferlangan kanal yarating, 0 dan n-1 gacha bo'lgan har bir i uchun uning kvadratini kanalga yuboring (goroutinasiz — bufer yetarli bo'lgani uchun bloklanish bo'lmaydi), kanalni yoping, so'ngra range bilan barcha qiymatlarni slice'ga yig'ib qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Buferlangan kanal (make(chan T, N)) yuboruvchiga qabul qiluvchini kutmasdan N tagacha qiymatni "navbatga qo'yish" imkonini beradi. Bufer to'lgach, yuborish yana buferlanmagan kanaldagidek bloklanadigan bo'lib qoladi.

NEXT UP

Channel Directions: Send-Only and Receive-Only