📖
Genel Bilgiler
  • Genel
  • Yazılım Teknolojiileri
    • SOLID
    • Mimariler ve Mimari Paternleri
    • MVC, MVP, MVVM
    • Mikroservis Yaklaşımı
    • DDD
    • Nesne Yönelimli Programlama
    • Hangi Programlama Dili Hangi Framework Öğrenilmeli?
    • Programlama Dilleri Üzerine tecrübeler
    • Microsoft .NET Teknolojileri
    • Microsoft .NET CORE 3.x ile Katmanlı Mimari Tasarımı
    • Test
    • Hangi Geliştirme ve Deployment Ortamı (Windows vs Linux)
    • Veri Tabanları ve Veri Tabanı Mimarileri
    • Asysnc/Awake
    • Oyun Geliştirme
      • WebAssembly vs Asm.ts
      • Unity ve Devler Ligi
      • Godot Oyun Motoru
      • Three.js ve Alternetif Javascript 3D Kütüphaneler/Framework' ler
    • Aspect Oriented Programming
  • Sanallaştırma
    • Sanallaştırma (Hypervisor ve Container & Docker)
    • Kubernetes
  • Yazılım Kültürleri
    • DevOps
    • Jenkins
    • SAST, DAST, SCA, Pentest
    • Glusterfs
    • Yazılım Üzerine Tartışmalar/Sohbetler
    • TUBITAK BILGEM YTE
  • Metro/Tren Sinyalizasyonu
  • Yapay Zeka (Artificial Intelligence)
  • Embedded Realtime Linux
  • Süper Bilgisayarlar Neden Süperler
  • Lock Free Tasarım
  • Git ile Çalışmak
  • CPU, APU, PPU, NPU, TPU ...
  • CANBUS
  • MERHABA (HELLO)
Powered by GitBook
On this page

Was this helpful?

  1. Yazılım Teknolojiileri

Asysnc/Awake

PreviousVeri Tabanları ve Veri Tabanı MimarileriNextOyun Geliştirme

Last updated 5 years ago

Was this helpful?

Windows da senkron çalışma, thread lerin kernelden sonuç beklemesi ve boşa RAM harcamasına sebep olur. Bloklama işlemi ilgili hardware donanımında yapılır. İşletim sistemi bir şey yapmıyor. Thread sadece bekliyor. Gelen cevap Windows üzerinden thread bilgi verir. Yeni istekler için yeni thread açacak bir yapı kurulması gerekir.

IRP: Input/Output Request Packet

Thread in gelen cevabı beklemesi yerine git başka işler yap diyebilirsiniz. Yani işlerinizi asenkron olarak halledebilirsiniz.

Örneğin, ReadAsync() diyince otomatik olarak bir task objesi oluşturuluyor ve iş ile alakalı bilgiler içerisine yerleştiriliyor. Windows senkrondaki gibi gerekli IRP isteğini ilgili donanıma gönderiyor. Ancak thread iniz thread poll geri dönüyor.

Peki yanıt oluştuğunda nasıl kaldığımız yerden devam ediyoruz?

Burada bazı protokoller var. Bazı portlar açılıyor. Windows bu portları kullanarak işin kimden geldiğini iş bittikten sonra kimin haberdar edileceğini biliyor. Yani uygulamanızı yeniden çağırabiliyor. Thread poll' a tekrar iş konuyor ve çalışması için bekliyor olacaktır. Extra thread oluşturmadan işlerimizi halledebiliyoruz. Event mekanizması kullanarak async programlama yapmış oluyoruz.

Sonuç olarak thread iniz bloklanmıyor. Yeni thread oluşturmak zorunda kalmayabiliyorsunuz. Tabiki iş yoğunluğuna göre thread sayısı artabilir.

Javascript mantığı da bu şekildedir.

Goland de async yok. Onun yerine channel (concurrency)var. Goland de go rutinleri var. Alt yapılarında thread kullanılıyor. Ancak go rutinleri co-operative yani işi bittikten sonra kullandığı threadi bırakıyor. Bunun artı eksi yönleri var. İşler çok uzun sürmeye başlarsa thread çok fazla kullanılır ve diğer işlere zaman kalmaz. Bunun için timeout yapıları kurmuşlar. CPU üzeinde threadler time sharring yaparken golang de go rutinleri time sharing yapar.

Go rutinlerinin bir artısı da düşük kaynak tüketimiyle başlarlar gerektikçe kaynak alırlar. Bu da çok hızlı bir şekilde çok fazla sayıda oluşturulabilmeleri sağlanır.

Diğer

LogoAsenkron (Asynchronous) Programlama Nedir?Medium
LogoASP.NET MVC ve Web API - Async / Sync Karşılaştırması
https://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287channel9.msdn.com