Buffered channel
- Go kursu
- Orta seviye
- Ders 11/80
- 4 dk
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 kapasiteyilen(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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
ch := make(chan int, ____)
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 |