Async/Await ve Event Loop: Binlerce Kullanıcı Aynı Anda Nasıl Bağlanıyor?

dev.to

Backend geliştirmeye başladığımda "async" kelimesini sadece kodun başına yazılan bir anahtar kelime sanıyordum. Daha sonra bunun modern web uygulamalarının en önemli performans mekanizmalarından biri olduğunu fark ettim.

Özellikle Network Access Control (NAC) gibi aynı anda binlerce cihazın bağlanabildiği sistemlerde async programlama vazgeçilmezdir.


Senkron Çalışma Nasıl Olur?

Diyelim ki aynı anda üç kullanıcı şirkete bağlanmak istiyor.

Senkron çalışan bir sistemde işlemler şu şekilde ilerler:

Kullanıcı 1 → İşlem tamamlanır.

Kullanıcı 2 → Bekler.

Kullanıcı 3 → Bekler.

Her kullanıcı kendisinden öncekinin işleminin bitmesini beklemek zorundadır.

Bu yaklaşım küçük uygulamalarda çalışabilir ancak kurumsal sistemlerde ciddi performans sorunlarına yol açar.


Asenkron Çalışma

Asenkron yapıda ise durum farklıdır.

FastAPI bir kullanıcı için PostgreSQL'den veri beklerken boş durmaz.

Bu sırada başka kullanıcıların isteklerini işlemeye devam eder.

Yani bekleme süresi boşa harcanmaz.

Bu sayede aynı donanımla çok daha fazla kullanıcıya hizmet verilebilir.


Async/Await Nedir?

Python'da;

user = await get_user()
Enter fullscreen mode Exit fullscreen mode

kodu aslında şunu söyler:

"Veriyi getir. Ben bu sırada başka işler yapayım. Veri hazır olunca bana haber ver."

İşte await'in temel mantığı budur.


Event Loop Nedir?

Asenkron sistemlerin arkasında çalışan görünmez yöneticiye Event Loop denir.

Event Loop;

  • Yeni istekleri alır.
  • Bekleyen işlemleri takip eder.
  • Hazır olan işlemleri çalıştırır.
  • Sistemin boş kalmasını engeller.

Bunu bir restoran garsonuna benzetebiliriz.

Garson sipariş verdikten sonra mutfağın önünde beklemez.

Diğer masalara hizmet etmeye devam eder.

Sipariş hazır olduğunda geri döner.

Event Loop da tam olarak bu mantıkla çalışır.


NAC Sistemlerinde Neden Önemlidir?

Bir şirket ağına aynı anda yüzlerce cihaz bağlanabilir.

Her cihaz için;

  • Redis sorgusu
  • PostgreSQL sorgusu
  • Policy değerlendirmesi
  • RADIUS cevabı

gibi işlemler yapılır.

Bu süreçler asenkron yönetilmediğinde kullanıcılar gereksiz yere beklemek zorunda kalır.


Sonuç

Async programlama yalnızca daha hızlı kod yazmak değildir.

Asıl amacı sistem kaynaklarını verimli kullanmak ve aynı anda daha fazla isteği yönetebilmektir.

Bu nedenle modern backend framework'lerinin büyük bölümü asenkron mimariyi desteklemektedir.

Source: dev.to

arrow_back Back to News