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