0Pricing
PHP Academy · Ders

PHP Eşzamanlılık Modeli

Engelleyici G/Ç işlemlerini ve eşzamansızlığın nerede yardımcı olduğunu anlayın.

PHP Eşzamanlılık Modeli, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.

PHP Varsayılan Olarak Sıralı Çalışır

Klasik PHP, engelleyici G/Ç ile her süreçte, baştan sona tek bir istek çalıştırır. Yavaş bir API'ye yapılan file_get_contents() çağrısı, baytlar gelene kadar tüm betiği dondurur. Paylaşımsız model (her istek için yeni bir süreç oluşturulması ve sonunda durumun kaldırılması) son derece basittir — ancak bu, tek bir çalışanın aynı anda tam olarak tek bir iş yapabileceği anlamına gelir. Bu ders, bunun nerede sorun oluşturduğunu ve eşzamansızlığın nerede yardımcı olduğunu gösterir.

Engelleyici G/Ç'yi Ölçmek

Hesaplama yerine beklemenin egemen olduğu gerçek geçen süreyi gözlemleyin. Sıralı üç adet bir saniyelik istek, CPU bütün süre boyunca boşta olsa bile yaklaşık 3 saniye sürer.

<?php
$start = microtime(true);
foreach (['a', 'b', 'c'] as $job) {
    usleep(1_000_000); // simulate a 1s blocking network call
    echo "done $job\n";
}
printf("elapsed: %.2fs\n", microtime(true) - $start); // ~3.00s

CPU'ya Bağlı ve G/Ç'ye Bağlı İşler

Eşzamanlılık yalnızca G/Ç'ye bağlı işlere yardımcı olur — ağda, diskte veya veritabanında bekleyerek geçirilen süreye. CPU'ya bağlı işler (karma oluşturma, görüntü yeniden boyutlandırma, ayrıştırma) için tek iş parçacığı zaten tamamen kullanılır; eşzamansızlık yalnızca zamanlama ek yükü getirir. Önce tanı koyun:

  • Çok sayıda yavaş HTTP çağrısı / veritabanı sorgusu → eşzamansızlık büyük kazanç sağlar.
  • Yoğun hesaplamalı sayısal döngüler → olay döngüsü yerine paralellik (süreçler/iş parçacıkları) kullanın.

PHP Şimdiye Kadar Nasıl Ölçeklendi

Tarihsel olarak PHP, süreç düzeyinde eşzamanlılık ile ölçeklendi: PHP-FPM bir çalışan süreç havuzu tutar; her süreç aynı anda tek bir istek işler, OS bunları çoğullar. Bu, istekler arasında gerçek eşzamanlılıktır; ancak bir istek içinde hiçbir şey sunmaz — standart engelleyici kodla tek bir işleyicide 50 API çağrısını aynı anda paralel çalıştıramazsınız.

Olay Döngüsü Kavramı

Asenkron PHP, bir olay döngüsü sunar: G/Ç işlemlerini engellemeyen işlemler olarak kaydeden, ardından bunlardan herhangi biri hazır olana kadar stream_select()/epoll içinde uyuyan ve veri geldikçe geri çağrıları çalıştıran tek bir iş parçacığı. Tek bir soketin başında boş boş beklemediği için bir iş parçacığı binlerce soketi yönetebilir.

<?php
// Conceptual loop: poll many non-blocking streams at once
$streams = openManyNonBlockingSockets();
while ($streams) {
    $read = $streams; $write = $except = [];
    stream_select($read, $write, $except, null); // sleeps until ANY is ready
    foreach ($read as $s) {
        handleReadyStream($s); // runs only the sockets that have data now
    }
}

İşbirlikli, Öncelikli Kesmesiz

Asenkron PHP işbirliklidir: görevler bir G/Ç noktasında gönüllü olarak denetimi bırakana kadar çalışır. Öncelikli kesme yoktur; bu nedenle uzun süren engelleyici bir çağrı veya sıkı bir CPU döngüsü tüm döngüyü durdurur ve diğer tüm görevleri kaynak beklemek zorunda bırakır. Altın kural: bir olay döngüsü görevi içinde hiçbir zaman engelleyici işlevleri (sleep, engelleyici PDO, file_get_contents) çağırmayın. Döngünün asenkron karşılıklarını kullanın.

PHP'de Üç Yaklaşım

Modern PHP, katmanlı bir araç seti sunar:

  • Fiberler (PHP 8.1, çekirdek) — bir çağrı yığınını duraklatıp sürdürmek için düşük düzeyli bir temel yapı. Tam bir çerçeve değil, yapı taşıdır.
  • ReactPHP / Amp — uzantı gerektirmeden engellemeyen G/Ç sağlayan, akışlar (ve artık fiberler) üzerine kurulmuş kullanıcı alanı olay döngüleri.
  • Swoole / OpenSwoole — eş yordamlar, yüksek performanslı bir sunucu ve kancalanmış engelleyici çağrılar sağlayan bir C uzantısı.

Bir strateji seçmeden önce çalışma zamanında nelerin kullanılabildiğini belirleyin.

<?php
echo 'Fibers: ' . (class_exists('Fiber') ? 'yes' : 'no'), PHP_EOL;
echo 'Swoole ext: ' . (extension_loaded('swoole') ? 'yes' : 'no'), PHP_EOL;
echo 'parallel ext: ' . (extension_loaded('parallel') ? 'yes' : 'no'), PHP_EOL;
echo 'PHP ' . PHP_VERSION, PHP_EOL;

Vaatler Gelecekteki Değerleri Modeller

Fiberlerden önce asenkron PHP, bekleyen sonuçları vaatler olarak sunuyordu: daha sonra çözümlenecek bir değer için yer tutucu. Geri çağrıları then() aracılığıyla eklersiniz. Bu yöntem çalışır, ancak iç içe zincirlere yol açar; fiberler kitaplıkların bunu senkron görünümlü bir await arkasına gizlemesini sağlar.

<?php
use React\Promise\Promise;

$promise = new Promise(function ($resolve) {
    // resolved later when I/O completes
    $resolve(42);
});
$promise->then(function ($value) {
    echo "got $value\n";
});

Eşzamanlılık ve Paralellik

Kesin konuşalım:

  • Eşzamanlılık — tek bir iş parçacığında (olay döngüsünde) dönüşümlü olarak yürütülen, sürmekte olan çok sayıda görev. G/Ç için idealdir.
  • Paralellik — birden çok çekirdekte (süreçler, parallel uzantısı, Swoole görev çalışanları) aynı anda yürütülen çok sayıda görev. CPU çalışmaları için gereklidir.

Bir olay döngüsü paralellik değil, eşzamanlılık sağlar. Aşağıdaki kod parçası, proc_open ile süreç düzeyinde paralelliği gösterir — üç çalışan aynı anda ayrı OS süreçlerinde çalışır.

<?php
$procs = [];
foreach (range(1, 3) as $i) {
    // Each worker is a separate OS process -> real parallelism
    $procs[] = proc_open(
        "php -r 'usleep(500000); echo \"worker $i done\\n\";'",
        [1 => ['pipe', 'w']], $pipes
    );
}
foreach ($procs as $p) { proc_close($p); }
echo "all workers launched in parallel\n";

Asenkrona Ne Zaman NOT Başvurulmalı

Asenkron çalışmanın maliyetleri vardır: uzun ömürlü bir çalışan, PHP'nin istekler arasında durumu artık temizlememesi anlamına gelir; bu nedenle bellek sızıntıları, statik önbellekler ve bağlantıların eskimesi sizin sorununuz olur. Bir istek işleyicisi tek bir veritabanı sorgusu yapıp yanıt döndürüyorsa PHP-FPM daha basittir ve aynı hızdadır. Çoklu G/Ç, WebSockets/uzun yoklama, akış veya kalıcı sunucu gereksiniminiz olduğunda asenkrona başvurun.

Gerçek Paralellik: ext-parallel ve Süreçler

CPU ağırlıklı iş dağıtımı için PHP, gerçek OS düzeyinde paralellik çalıştırabilir. parallel uzantısı, yalıtılmış belleğe sahip çalışan iş parçacıkları oluşturur; alternatif olarak proc_open/pcntl_fork süreçler oluşturur. Bir olay döngüsünden farklı olarak bunlar birden çok çekirdeği aynı anda kullanır — darboğaz beklemek değil hesaplama olduğunda doğru araç bunlardır.

<?php
// Requires ext-parallel — runs tasks on separate threads/cores
use parallel\Runtime;

$runtime = new Runtime();
$future = $runtime->run(function (): int {
    $sum = 0;
    for ($i = 0; $i < 1_000_000; $i++) $sum += $i; // CPU work on another core
    return $sum;
});
echo $future->value(), PHP_EOL;

Hızlı Kontrol

Bir olay döngüsü görevi içinde engelleyici sleep(2) çağırırsanız ne olur?

Özet

Artık PHP eşzamanlılığı hakkında zihinsel bir modele sahipsiniz:

  • Varsayılan PHP senkron, engelleyici ve paylaşımsızdır; FPM istekler arasında ölçeklenir, tek bir istek içinde değil.
  • Asenkron çalışma, engellemeyen akışları kullanan tek iş parçacıklı bir olay döngüsü aracılığıyla G/Ç ağırlıklı çalışmalara yardımcı olur.
  • Model işbirliklidir — döngüyü hiçbir zaman engellemeyin; uzun süren CPU çalışmaları için eşzamanlılık değil paralellik gerekir.
  • PHP araç seti: fiberler (temel yapı), ReactPHP/Amp (kullanıcı alanı döngüleri + vaatler), Swoole (eş yordam uzantısı).

Sıkça Sorulan Sorular

“PHP Eşzamanlılık Modeli” dersi ücretsiz mi?

Evet — “PHP Eşzamanlılık Modeli” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.

“PHP Eşzamanlılık Modeli” dersinde ne öğreneceğim?

Engelleyici G/Ç işlemlerini ve eşzamansızlığın nerede yardımcı olduğunu anlayın. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

PHP Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“PHP Eşzamanlılık Modeli” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. PHP Eşzamanlılık Modeli
  2. PHP 8.1 Fiber'ları
  3. ReactPHP ile Olay Döngüleri
  4. Swoole ile Yüksek Performanslı Sunucular
← PHP Academy Sayfasına Dön