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

Asenkron PHP

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Hidayet Doğan 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

Avatar for Hidayet Doğan

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