Asenkron PHP

Asenkron PHP

PHP'de web ve CLI tarafinda asenkron programlama nasıl yapabiliriz? PHP kütüphaneleri ve eklentileri. Demo kaynak kodları: https://github.com/hdogan/asenkron-php-demo

D55de538259751cc08d16a0843e1c69f?s=128

Hidayet Doğan

September 08, 2018
Tweet

Transcript

  1. ASENKRON PHP HİDAYET DOĞAN

  2. MERHABA! • 1995 programlama ile tanışma • 1998 yılından itibaren

    PHP • 1999 yılından itibaren iş hayatı • 1998 (ya da 1999) yılından itibaren ögrenci • Kurucu Ortak & Yazılım Uzmanı
 @ Yazılım Parkı • Yazılım Uzmanı
 @ İ. D. Bilkent Üniversitesi Fotoğraf: Onur Canalp
  3. FERAGATNAME • Bilgisayar bilimcisi değilim • Birazdan bahsedeceğimiz beyin yakıcı

    kavramlar konusunda uzman değilim
  4. ASENKRON Bir görevi durdurmadan/bekletmeden başka görevler yapmak 
 Örnek: Kitap

    okurken çamaşır yıkamak (elle değil)
  5. NEREDE ASENKRON? • Web
 Dosya (video, PDF, imaj) işleme, e-posta

    gönderme • CLI (Command Line Interface)
 Çoklu dosya indirme, ağ servisleri, her türlü ağır iş
  6. NEREDE ASENKRON? - WEB Apache mpm_prefork PHP mod_php Tarayıcı İstek

    Yanıt Veritabanı işi E-posta işi Video çevirme işi 0.01sn 5 dk 30 dk ±35 dk
  7. NEREDE ASENKRON? - WEB Apache mpm_prefork PHP mod_php Tarayıcı İstek

    Yanıt Veritabanı işi E-posta işi Video çevirme işi ±0.01sn
  8. NASIL ASENKRON? - WEB • İşleri kuyruğa sok (queue). •

    Arka planda kuyrukları çalıştır (worker/consumer).
  9. NASIL ASENKRON? - WEB Apache mpm_prefork PHP mod_php Tarayıcı İstek

    Yanıt + Bağlantıyı Kes die(“PHP sonlandı, hafıza temizlendi.”)
  10. NASIL ASENKRON? - WEB • İşleri kuyruğa sok (queue). •

    Arka planda kuyrukları çalıştır (worker/consumer). • İşin durumunu aralıklarla sor (AJAX)
 Ya da o sana söylesin (WebSocket)
  11. NASIL ASENKRON? - WEB • Beanstalkd • Gearman • Redis

    • ZeroMQ, RabbitMQ • Veritabanı
  12. NEREDE ASENKRON? - CLI Toplu e-posta gönderme E-posta gönder E-posta

    gönder E-posta gönder 1 sn 1.2 sn 0.9 sn 3.1 sn e-posta-gonderici.php
  13. NEREDE ASENKRON? - CLI Toplu e-posta gönderme E-posta gönder E-posta

    gönder E-posta gönder 1 sn 1.2 sn 0.9 sn ±1.2 sn e-posta-gonderici.php
  14. NEREDE ASENKRON? - CLI Aptal Bot 1. Müşteriye yanıt 2.

    Müşteriye yanıt 3. Müşteriye yanıt chat-bot.php
  15. NEREDE ASENKRON? - CLI Akıllı Bot 1. Müşteriye yanıt 2.

    Müşteriye yanıt 3. Müşteriye yanıt chat-bot.php
  16. NASIL ASENKRON? “PHP ile asenkron kod mu yazılır ya.” –

    JavaScript veya Go’ya Gönül Verip Macbook’unu Etiketle Dolduranlar Derneği
  17. REACTPHP • Non-Blocking Event Loop • Asenkron DNS çözücü •

    Asenkron Sunucu, İstemci • Promise
  18. AMP • Non-Blocking Event Loop • Asenkron DNS çözücü •

    Asenkron Sunucu, İstemci • Promise, Coroutine
  19. SWOOLE • Non-Blocking Event Loop / Multi-Process • Asenkron DNS

    çözücü • Asenkron Sunucu, İstemci, Dosya İşlemleri • Coroutine
  20. EVENT LOOP? • select (Linux, Windows) • poll (Solaris) •

    epoll (Linux) • kqueue (BSD, Mac) Okuyacak/gönderilecek veri var mı? Hata oluştu mu? Zaman aşımı var mı?
  21. NON-BLOCKING? • Blocking Kipi
 Programın işleyişi işlemler (I/O, bağlantı kurma/

    kabul etme gibi) bitene kadar bekler. • Non-Blocking Kipi
 İşlemler anında yanıt döner. Bittiğinde programa haber/sinyal verilir. PHP’de işlemler aksi belirtilmedikçe BLOCKING (işlemin bitmesi beklenir)
  22. PROMISE? (Asenkron) işlemlerin olası sonuçlarını temsil eder. Durumlar
 * waiting/pending


    * resolved/success
 * failed/failure AKA: “Futures”
  23. COROUTINE? • Tamamen bitmeden adımlardan geri dönüş alma • Kanal

    (channel) aracılığı ile haberleşme (IPC) • AKA: Fiber, lightweight thread • Jonglörün topları çevirmesi Araya girilebilen, (genellikle) asenkron çalışan fonksiyonlar.
  24. Non-Blocking Event Loop Promise Coroutine Concurrency Parallel Multi-Process Thread

  25. KISS Senkron Programlama • İşlemi başlatırız. • Bitmesini bekleriz. •

    Sonraki işlemlere geçeriz.
  26. KISS Asenkron Programlama • İşlemi başlatırız. • Bitmesini beklerken başka

    işlemlere geçeriz. • Bitince bize haber verir. (callback/promise)
  27. KISS Asenkron Programlama • Ayrı bir “thread” veya “process” ile

    uygulanmış olabilir. • Tek “process” ile event loop üzerinde uygulanmış olabilir. • Uygulama detayları kullanıcıdan soyutlanır (kullanımı basitleştirilir, coroutine, async/ await).
  28. KISS Asenkron Programlama • PHP’de işlemler aksi belirtilmedikçe BLOCKING (işlemin

    bitmesi beklenir) • PHP’de ek kütüphane veya eklentilerle asenkron programlama yapabiliriz. • Asenkron işlemler içinde BLOCKING işlemlerden kaçınılır.
  29. REACTPHP AMP SWOOLE Asenkron işlemler yapmamızı sağlar

  30. DEMO

  31. SORULAR?

  32. TEŞEKKÜRLER! KAYNAKLAR • reactphp.org • amphp.org • swoole.co.uk • kraken-php.com

    Hİ.DO • http://hi.do • @hdogan • github.com/hdogan • speakerdeck.com/hdogan • tr.linkedin.com/in/hdogan