69 puan yazan alstjr7375 2022-12-28 | 10 yorum | WhatsApp'ta paylaş

Basit bir terim derlemesiyle başlayıp grafiklerden yarı iletkenlere kadar geniş bir yelpazeyi ele aldık.

  1. Terimler
    • Eşzamanlılık / Paralellik
    • Asenkroni / Non-blocking
    • Preemptive / Non-preemptive
  2. İşletim sistemi ve işlemci
    • İşletim sistemi
    • İşlemci
  3. Coroutine ve fiber
    • Fiber
    • Coroutine
  4. Generator, Async/Await, continuation
    • Generator
    • Async / Await
    • Continuation
  5. Promise ve Future
  6. I/O multiplexing
    • Multiplexing
    • Socket
    • I/O modelleri
  7. Ring buffer, modern I/O modelleri, LMAX Disruptor
    • Ring buffer
    • Modern I/O modelleri
    • LMAX Disruptor
  8. Senkronizasyon primitive'leri
    • Gereklilik
    • Thread safety
    • Spinlock
    • Mutex
    • Semaphore
    • STM
    • GIL
  9. Diğer betik dillerinin yaklaşımları ve Reactor/Proactor desenleri
    • Ractor (Ruby)
    • Node.js (Reactor deseni)
    • Proactor deseni
  10. CSP ve aktör
    • CSP
    • Aktör
  11. Green thread, goroutine ve modern asenkron runtime teknolojileri
    • Green thread
    • Modern CSP runtime'ları
    • Modern aktör runtime'ları
  12. Paralellik
    • SIMD ve pipelining
    • OpenMP & MPI
    • Modern paralellik teknikleri
    • Lambda mimarisi
  13. GPU
    • Pipeline ve shader
    • Monitör
    • Buffering
    • Dikey senkronizasyon
    • Frame pacing ve beam racing
    • Compositor
    • Grafik API / kütüphaneleri
  14. Diğer çipler
    • Genel bakış
    • DSP
    • FPGA
    • TPU
  15. Kaynakça

10 yorum

 
roxie 2022-12-31

Senkron ve asenkron, işin tamamlandığını kimin kontrol ettiğiyle ilgilidir
Bloklama ve non-blocking, kontrol yetkisinin olup olmadığıyla ilgilidir

Bu ifadenin pek çok blogda aynı şekilde tekrarlandığını görüyorum; asıl kaynağının neresi olduğunu merak ediyorum.

Blogların çoğu birbirine referans vermekle meşgul olduğu için özgün metni tahmin etmek zordu; bulabildiğim tek şey IBM'in AIO belgesi oldu, ama bunun yalnızca kernel I/O bağlamında ele alındığını düşünüyorum. Ayrıca bu ayrım yönteminin kendisinin de tartışmalı olduğunu duydum.

Güvenilirliği yüksek bir değerlendirme ölçütü müdür?

 
alstjr7375 2022-12-31

Öncelikle senkron/asenkron için devre tarafındaki temeli esas alabiliriz.
Senkron devreler zamanlama için clock kullanır, asenkron olanlar ise event ya da başka girdiler tarafından tetiklenir.
Yani asenkron API'leri de benzer şekilde callback vb. ile tetiklenen bir yapı olarak tanımlamak çok da yanlış olmaz gibi görünüyor.
https://developer.mozilla.org/en-US/docs/…

Blocking/non-blocking API'lerde uygun tanım, işlemi mutlaka beklemek gerekip gerekmediğidir.
Ancak beklememek için çağrılan fonksiyonun kontrolü elinde tuttuğu bir implementasyon olması gerektiğinden, sanırım bu şekilde açıklanma eğilimi daha baskın.
https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/

Kısaca geçmek istediğim için atlamıştım, ama bu içeriği ek olarak dahil etmeye çalışacağım.

 
roxie 2023-01-01

Yazdıklarınıza tamamen katılıyorum. Ancak bu iki ölçüt ekseninin bir kesitte dört bölge olarak çizilmesi gerekip gerekmediği, çizilip çizilemeyeceği ve uygun biçimde ayrışıp ayrışmadığı konusunda hâlâ emin olamıyorum. Bana göre Blocking ile Sync kavramsal olarak bağlamın %90’ını paylaşıyor gibi geliyor. Aynı durum Non-Blocking & Async için de geçerli.

 
alstjr7375 2023-01-01

Blocking-Sync ile Non-Blocking-Async birlikte sık kullanılsa da, bunları ayırmanın gerekli olduğu durumlar vardır.

  • Blocking-Async: select gibi I/O multiplexing
  • Non-Blocking-Sync: veri polling

Bu yüzden ben bunları ayırarak kullanmanın daha doğru olduğunu düşünüyorum.

 
roxie 2023-01-02

Verdiğiniz örnekler hakkında neredeyse hiç bilgim olmadığından, sanırım bu yüzden tam olarak empati kuramıyorum.

https://incredible-larva.tistory.com/entry/IO-Multiplexing-Topabogi-1. bölüm bu yazıda aşağıdaki gibi açıklanıyor:

Sonuç olarak, select çağrısı yapan user process, dönen değere bakarak devam eden bir işlem olup olmadığına karar verir. Öngörülemez şekilde gelen birden fazla I/O isteği aynı anda yönetildiği için bunu Asynchronous olarak görenler de var; ancak sonuçta gerçek tek tek I/O işlemleri Synchronous bir davranış gösterir.

Buna dair nasıl bir görüşünüz olduğunu merak ediyorum. Açıkçası ben bu noktada artık bu 2x2 sınıflandırmanın anlamsız olduğunu hissetmeye başladım. Çünkü alanına göre, bakış açısına göre yorumlar çok farklı görünüyor.

 
alstjr7375 2023-01-02

Devamında, kernel'in yanıtını beklerken kernel'den sonuç değerinin hazır olduğuna dair bir callback sinyali gelir ve user process veriyi kendi buffer'ına kopyalar.

Bu kısım, yukarıda mutabık kaldığınız callback ile tetiklenen yöntem olduğu için, ille de ayırıp tanımlamak gerekirse buna Blocking-Async demek daha doğru gibi görünüyor.
Bakış açısına göre muğlak görünen durumlar olabileceğini de düşünüyorum.

Ancak polling çok net bir örnek:
https://en.wikipedia.org/wiki/Polling_(computer_science)

Polling'de verinin hazır olup olmadığı tekrar tekrar kontrol edildiği için Sync-Blocking'e uygun bir örnektir.

 
wonkwh 2022-12-29

Vay canına, harika bir kaynak, teşekkürler.

 
kayws426 2022-12-29

Keyifle okudum!

 
bus710 2022-12-28

Kaydırma sonu gelmiyor gibi görünüyor, haha
Benzer konuları ele alan "7 Concurrency Models" adlı kitabı da en az bir kez okumaya değer gibi duruyor.

 
alstjr7375 2022-12-29

İçindekilerle karşılaştırınca benziyorlar.
Güzel bir kitap gibi görünüyor