Go (Golang) Orta Seviye Eşzamanlılık

Go Kanalları (Channels): Buffered vs Unbuffered & Select İfadesi

"Belleği paylaşarak iletişim kurma; iletişim kurarak belleği paylaş!"

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

Unbuffered: El sıkışmadır; sen elini uzattığında karşı taraf tutana kadar havada donup beklersin. Buffered: Posta kutusudur; kutu dolana kadar mektupları atıp gidersin, kutu dolunca postacı bekler.

Teknik & Mimari Tanım

Unbuffered Channel (make(chan T)) senkron bloklama yapar; gönderici ve alıcı aynı anda hazır olmalıdır. Buffered Channel (make(chan T, cap)) kapasitesi dolana kadar göndericiyi bloke etmez. select ifadesi birden çok kanal işlemini non-blocking multiplexing ile dinler.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“Unbuffered kanallar kesin senkronizasyon garantisi verirken, Buffered kanallar kuyruk işlevi görerek anlık yük patlamalarını dengeler. Kapanmış (closed) bir kanala veri göndermek panic fırlatır; ancak kapalı kanaldan veri okumak sıfır değer (zero value) ve false döner.”

Go (Golang) Örnek Uygulaması
ch := make(chan string, 1)
ch <- "mesaj" // Buffer var, bloke olmaz!

select {
case msg := <-ch:
    fmt.Println("Alındı:", msg)
case <-time.After(500 * time.Millisecond):
    fmt.Println("Zaman aşımı!")
}
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

Kapalı bir kanala (closed channel) veri yazmaya kalkışarak programı panikletmek (panic: send on closed channel).