$30 off During Our Annual Pro Sale. View Details »

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. ASENKRON PHP
    HİDAYET DOĞAN

    View Slide

  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

    View Slide

  3. FERAGATNAME
    • Bilgisayar bilimcisi değilim
    • Birazdan bahsedeceğimiz beyin yakıcı kavramlar
    konusunda uzman değilim

    View Slide

  4. ASENKRON
    Bir görevi durdurmadan/bekletmeden başka
    görevler yapmak

    Örnek: Kitap okurken çamaşır yıkamak (elle değil)

    View Slide

  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ş

    View Slide

  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

    View Slide

  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

    View Slide

  8. NASIL ASENKRON? - WEB
    • İşleri kuyruğa sok (queue).
    • Arka planda kuyrukları çalıştır (worker/consumer).

    View Slide

  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.”)

    View Slide

  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)

    View Slide

  11. NASIL ASENKRON? - WEB
    • Beanstalkd
    • Gearman
    • Redis
    • ZeroMQ, RabbitMQ
    • Veritabanı

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  19. SWOOLE
    • Non-Blocking Event Loop / Multi-Process
    • Asenkron DNS çözücü
    • Asenkron Sunucu, İstemci, Dosya İşlemleri
    • Coroutine

    View Slide

  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ı?

    View Slide

  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)

    View Slide

  22. PROMISE?
    (Asenkron) işlemlerin olası sonuçlarını temsil eder.
    Durumlar

    * waiting/pending

    * resolved/success

    * failed/failure
    AKA: “Futures”

    View Slide

  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.

    View Slide

  24. Non-Blocking
    Event Loop
    Promise
    Coroutine
    Concurrency
    Parallel
    Multi-Process
    Thread

    View Slide

  25. KISS
    Senkron Programlama
    • İşlemi başlatırız.
    • Bitmesini bekleriz.
    • Sonraki işlemlere geçeriz.

    View Slide

  26. KISS
    Asenkron Programlama
    • İşlemi başlatırız.
    • Bitmesini beklerken başka işlemlere geçeriz.
    • Bitince bize haber verir. (callback/promise)

    View Slide

  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).

    View Slide

  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.

    View Slide

  29. REACTPHP AMP SWOOLE
    Asenkron işlemler yapmamızı sağlar

    View Slide

  30. DEMO

    View Slide

  31. SORULAR?

    View Slide

  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

    View Slide