CodeBlanks Logo Icon CodeBlanks

Buffered channel

Buffered channel ve kapasite kavramını öğrenirsin.

Buffered channel

Buffered channel, belirli sayıda değeri arabelleğe alabilen channel'dır: ch := make(chan int, 3). Tampon dolana kadar gönderen bloklanmaz; alıcı olmasa bile gönderim tamamlanır.

Tampon dolunca gönderen bloklanır; tampon boşalınca alıcı bloklanır. Bu, üretici-tüketici (producer-consumer) deseninde verimlilik sağlar. Fakat tampon boyutu büyük tutulursa sıralama belirsizleşebilir.

Tampon davranışı

Buffered channel davranışı şu dört noktada özetlenir:

  • Tampon dolana kadar gönderen bloklanmaz; alıcı beklemesi gerekmez
  • Tampon boşken alıcı bloklanır; veri gelene kadar bekler
  • cap(ch) tampon boyutunu verir, yani toplam kapasiteyi
  • len(ch) dolu slot sayısını verir, yani bekleyen veriyi

Tamponlu channel asenkron başlangıç sağlar ama sıralama garantisi vermez; boyutu dikkatli seçmek gerekir.

Uygulama Buffered channel kullan

main içine bir make(chan string, 2) çağrısı ve fmt.Println ile tamponlu çalıştı yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func main() {
    ch := make(chan string, 2)
    ch <- "tamponlu çalıştı"
    fmt.Println(<-ch)
}

Beklenen çıktı

tamponlu çalıştı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 make(chan int, 3) kaç değer arabelleğe alır?

  • 2
  • 1
  • 3 Doğru cevap
  • Sınırsız

Açıklama: Tampon boyutu ikinci parametredir.

2 Buffered channel oluşturma

Soru
ch := make(chan int, ____)
Cevap
ch := make(chan int, 3)

Açıklama: İkinci parametre tampon boyutudur.

3 Buffered channel eşleştir

Kavram Anlamı
make(chan int, 3) Tamponlu
cap(ch) Tampon boyutu
len(ch) Dolu sayısı
bloklanma Tampon dolunca

Orta seviye bölümündeki tüm dersler