Asenkron Kod Yazarken Deadlock Yakalamak: Python vs JavaScript Gerçekliği

Asenkron programlamayı öğrenirken bize söylenen ilk şey: "Deadlock olmaz, çünkü single-threaded." Yalan. Olmaz mı? Oluyor. Başka bir şekilde oluyor.

Python'da `asyncio` ile çalışırken birkaç yıl önce bir proje yaptım. Veritabanı bağlantısını havuzlayıp, üç tane concurrent request'i sırayla işliyordum. Bekliyorum, bekliyorum... uygulama donmuş. Thread yok, ama deadlock var. Neden? Çünkü `await` kullanmadığım bir kütüphane fonksiyonu var idi ve o bloke ediyordu event loop'u. Asenkron değil, senkron kod karışmış.

JavaScript'te aynı şey farklı görünüyor. `async/await` yazıyorsun, hata fırlatıyorsun ama `catch` etmiyorsun. Promise chain'i kırılıyor, sessizce ölüyor. Deadlock değil, ama sonuç aynı: sistem cevap vermiyor.

Python'daki gerçek sorun: Havuz (pool) boyutu ile ilgili. Bir context manager'ı yanlış kullanırsan, resource geri dönmüyor. Sonraki request'ler sonsuz bekliyor. `asyncio.Lock` veya `Semaphore` kullanırken sırası gelmese bile lock tutarsan, sistem kilitlenir. Özellikle `async with` unuttuğunda.

JavaScript'teki gerçek sorun: Race condition. Aynı resource'a iki `await` işlemi paralel başlatırsan ve biri diğerini bekliyorsa, ikisi de asılı kalır. Mesela iki endpoint aynı veritabanı satırını update etmeye çalışıyorsa, transaction timeout'a giriyor. Deadlock değil, ama sistem donuyor.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Deadlock'u yakalamak için ne yapıyorum?

Python'da: `asyncio.wait_for()` timeout'u mutlaka koy. Event loop'unu debug et: `asyncio.create_task()` ile oluşturduğun task'ları izle. Blocking kod yazmadığından emin ol, senkron kütüphaneleri async wrapper'a al.

JavaScript'te: Promise.race() ile timeout ekle. Unhandled rejection listener'ını açık tut. Resource leak'i izle: açtığın bağlantı kapatılıyor mu? Concurrent request'lerin sırasını kontrol et, queue mekanizması ekle.

Sonuç: Asenkron kod deadlock olmadığını söyleyenler yanılıyor. Farklı şekilde oluyor, daha gizli oluyor. Python'da event loop'u bloke etmek, JavaScript'te promise chain'i kırmak, ikisi de sistemi donduruyor. Fark, Python'da daha açık, JavaScript'te daha sinsi.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz