Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Asenkron PHP

Hidayet Doğan
September 08, 2018

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

Hidayet Doğan

September 08, 2018
Tweet

More Decks by Hidayet Doğan

Other Decks in Programming

Transcript

  1. 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
  2. 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ş
  3. 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
  4. 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. NASIL ASENKRON? - WEB • İşleri kuyruğa sok (queue). •

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

    Yanıt + Bağlantıyı Kes die(“PHP sonlandı, hafıza temizlendi.”)
  7. 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)
  8. NASIL ASENKRON? - WEB • Beanstalkd • Gearman • Redis

    • ZeroMQ, RabbitMQ • Veritabanı
  9. 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
  10. 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
  11. NEREDE ASENKRON? - CLI Aptal Bot 1. Müşteriye yanıt 2.

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

    Müşteriye yanıt 3. Müşteriye yanıt chat-bot.php
  13. 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
  14. AMP • Non-Blocking Event Loop • Asenkron DNS çözücü •

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

    çözücü • Asenkron Sunucu, İstemci, Dosya İşlemleri • Coroutine
  16. 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ı?
  17. 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)
  18. 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.
  19. KISS Asenkron Programlama • İşlemi başlatırız. • Bitmesini beklerken başka

    işlemlere geçeriz. • Bitince bize haber verir. (callback/promise)
  20. 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).
  21. 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.
  22. 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