Slide 1

Slide 1 text

ASENKRON PHP HİDAYET DOĞAN

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

ASENKRON Bir görevi durdurmadan/bekletmeden başka görevler yapmak 
 Örnek: Kitap okurken çamaşır yıkamak (elle değil)

Slide 5

Slide 5 text

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ş

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

NASIL ASENKRON? - WEB Apache mpm_prefork PHP mod_php Tarayıcı İstek Yanıt + Bağlantıyı Kes die(“PHP sonlandı, hafıza temizlendi.”)

Slide 10

Slide 10 text

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)

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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)

Slide 22

Slide 22 text

PROMISE? (Asenkron) işlemlerin olası sonuçlarını temsil eder. Durumlar
 * waiting/pending
 * resolved/success
 * failed/failure AKA: “Futures”

Slide 23

Slide 23 text

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.

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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.

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

DEMO

Slide 31

Slide 31 text

SORULAR?

Slide 32

Slide 32 text

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