Junior
Go'da tamponlu ve tamponsuz kanallar arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bufferlenmemiş kanallar, veri gönderimi ve alımının senkron gerçekleşmesini gerektirir. Gönderici, alıcı verileri kabul etmeye hazır olana kadar bloklanır ve tersi de geçerlidir. Bunların tampon boyutu sıfırdır.
Bufferlenmiş kanalların sonlu bir tampon boyutu vardır. Gönderici, tampon doluysa bloklanır ve alıcı, tampon boşsa bloklanır.
// Bufferlenmemiş kanal
unbufferedChan := make(chan int)
// Tamponlu kanal, tampon boyutu 5
bufferedChan := make(chan int, 5)
| Özellik | Bufferlenmemiş kanal | Bufferlenmiş kanal |
|---|---|---|
| Tampon boyutu | 0 | > 0 |
| Senkronizasyon | Senkron etkileşim | Asenkron, tampon dolu/boş değilse |
| Göndericinin bloklanması | Alıcı alana kadar | Tampon dolu olana kadar |
| Alıcının bloklanması | Gönderici gönderene kadar | Tampon boşalana kadar |
Bufferlenmemiş kanallar, goroutine'leri senkronize etmek ve mesajların kaybolmamasını sağlamak için kullanılır. Bufferlenmiş kanallar, bloklamaları azaltmak için kullanılır, böylece gönderici, alıcı henüz hazır değilse bile çalışmaya devam edebilir veya tersi olabilir.