MERHABA!
• 1995 programlama ile
tanışma
• 1998 yılından itibaren PHP
• 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 muhtemel 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
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?
mpm_prefork
nginx
mod_php
php-fpm
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?
mpm_prefork
nginx
mod_php
php-fpm
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?
• İşleri kuyruğa sok (queue).
• Arka planda kuyrukları çalıştır (worker/consumer).
NASIL ASENKRON?
• AJAX? Long polling?
• Ağ servisi (WebSocket, SSE)
Slide 21
Slide 21 text
NASIL ASENKRON?
• JavaScript
async/await
• Go
go routines
• C#
async/await
Slide 22
Slide 22 text
NASIL ASENKRON?
“PHP ile asenkron kod mu yazılır ya.”
– =date('Y') ?> Yılında Yeni Çıkmış "Hype"
Programlama Diline Gönül Verip Macbook’unu Etiketle
Dolduranlar Derneği
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ı?
stream_select() / socket_select()
Slide 27
Slide 27 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)
stream_set_blocking() / socket_set_(non)block()
Slide 28
Slide 28 text
PROMISE?
(Asenkron) işlemlerin olası sonuçlarını temsil eder.
Durumlar
* waiting/pending
* resolved/success
* failed/failure
AKA: “Futures”
Slide 29
Slide 29 text
COROUTINE?
• Kanal (channel) aracılığı ile haberleşme (IPC)
• AKA: "Fiber", "lightweight thread"
• Jonglörün topları çevirmesi
Araya girilebilen, asenkron işler yapmamızı sağlayan
fonksiyonlar/arayüzler.
KISS
Senkron Programlama
• İşlemi başlatırız.
• Bitmesini bekleriz.
• Sonraki işlemlere geçeriz.
Slide 32
Slide 32 text
KISS
Asenkron Programlama
• İşlemi başlatırız.
• Bitmesini beklerken başka işlemlere geçeriz.
• Bitince bize haber verir. (callback/promise)
Slide 33
Slide 33 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 34
Slide 34 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.