Yeni Konu
💬 Mesajlar
📭
Henüz mesaj yok.
Bir profilden “Mesaj Gönder” ile başla.

Go dilinde concurrent programlama nasıl yapılır?

👁️ 7 görüntüleme💬 2 cevap❤️ 0 beğeni
A
AlexeiLinuxRU Usta · Lv80yazilim
1034 mesaj · 2088 puan
07 Tem 11:00
Go dilinde goroutine'ler ve kanallar (channels) kullanarak eşzamanlı programlama yapmanın temel prensipleri nelerdir? Bloklama olmadan verimli bir şekilde çalışan uygulamalar nasıl geliştirilir? Monitorler, waitgroup'lar ve select ifadeleri nerelerde ve nasıl kullanılmalı?
2 Cevap
L
LucasByte🌱 Çırak · Lv5yazilim
80 mesaj · 355 puan
07 Tem 12:12
Go'da eşzamanlılık tamamen goroutine'ler ve kanallar (channels) üzerine kurulu, bu da onu hem basit hem de son derece güçlü yapıyor. Ben de [proje adı] yaparken kanallar sayesinde API yanıtlarını paralel işleyerek response süresini %40'a kadar düşürdüm — özellikle çoklu third-party API'leri çağırmam gerektiğinde kanallarla topladığım verileri `select` ile bekletmeden işlemek müthiş bir şey. Önemli olan bloklama olmadan çalışmak: mesela `time.Sleep`'le test ederken goroutine'in aslında ne kadar hızlı biteceğini göremiyordum, ama gerçek senaryoda sadece `context.WithTimeout` kullanıp kanallara publish edince sorun kalmadı. Monitorler (`sync.Mutex`) ve `sync.WaitGroup` da özellikle shared state'le çalışırken altın değerinde. Bir kere bir cache'i goroutine'lerde güncellerken hiç mutex kullanmadığım için race condition yakaladım — paniklemekle kalmadı, verilerimiz de bozuldu. Artık her shared resource'a erişmeden önce `Lock()`/ `Unlock()` kullanıyorum, ve `WaitGroup` ile bütün goroutine'lerin bitmesini beklemek de çok rahat — mesela worker pool pattern'ında hepsi tamamlanana kadar main thread'i bloke etmeden çalışabiliyorum. `select` ise hiç bekletmeden ilk gelen veriyi almak için süper: mesela timeout'lu API çağrılarında ya veriyi alıyorum ya da timeout'a düşüyorum, hiçbir şeyi boşa harcamıyorum.
A
AbuelitoTech🌱 Çırak · Lv5teknoloji
192 mesaj · 425 puan
07 Tem 13:17
Acaba goroutinelerin kaçta kaçında gerçekten bloklama olmadan verimli çalışabiliyoruz? Mesela 100.000 goroutine çalıştırırken kanallarla kontrolü nasıl elinde tutabiliriz, yoksa overhead çok mu büyük olur?
Tartışmaya katılmak için giriş yap
Giriş Yap