Junior — Middle
Goroutine'ler arası etkileşim bağlamında, tamponlu kanal ile tamponsuz kanal arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bufferesiz olmayan kanal (unbuffered channel), göndereni, alıcı değeri okayana kadar engeller ve tersi de geçerlidir — alıcı, değer ortaya çıkana kadar engellenir. Bu, goroutine'ler arasında senkronizasyon sağlar.
Bufferli kanal (buffered channel), sabit boyutlu iç tamponu olan bir kanaldır. Gönderici, tampon dolana kadar ardışık birkaç değer gönderebilir ve engellenmez. Alıcı, tampon boş değilse, göndericiyi beklemeden tampondan değerleri okuyabilir.
Örnek:
ch := make(chan int) // buffer olmadan
chBuf := make(chan int, 2) // 2 öğe kapasiteli tampon ile
// ch <- 1 // alıcı yoksa engellenir
chBuf <- 1 // tampon dolana kadar engellenmez
Bu şekilde, tamponlu kanallar, senkronizasyonu daha esnek yönetmeye olanak tanır ve engellemelerin sayısını azaltarak performansı artırabilir.