11 Eylül 2015 Cuma

PHP ile Thread kullanımı

Diyelim ki üç işimiz var ve her biri 1 saniye sürüyor. Normalde arka arkaya çalıştığında bu işlem 3 (üç) saniye sürer. Bir sürü işimiz olsun her biri 1 saniyelik. Tek thread lik bir süreçte bu işler arka arkaya bir birini bekleyerek çalışacağı için toplam işlem süresi iş sayısı kadar olacaktır.
Bunlara işlem sayısı kadar thread açarsak bütün işler 1 saniye sürer.

PHP ile bir örnek yapalım;
Projede Thread kullanmak için PHP de pthread isimli extension yüklemek gerekiyor.


brew install php55-pthreads

Bunu yapınca bütün PHP nin ve eklentilerinin yeniden derlenmesi gerektiğini söylemem gerekiyor.

Örnek kullanım:


result = $sleep;
        sleep($sleep);
    }

    public function getResult() {
        return $this->result;
    }
}

echo "basladi\n";
$timer = microtime(true);
$pool = new Pool(4);
$pool->submit
    (new WebWork());
$pool->submit
    (new WebWork());
$pool->submit
    (new WebWork());
$pool->submit
    (new WebWork());
$pool->shutdown();

$pool->collect(function($query){
    var_dump(
        $done = $query->getResult());
    
    return count($done);
});

printf("islem %f saniye surdu\n", microtime(true)-$timer);
echo "bitti\n";
?>

Yukarıdaki kodu isterseniz console isterseniz web üzerinden çalıştırın aynı sonucu alacaksınız. İşlemler yaklaşık olarak 1 saniye sürecek. Eğer thread sayısını 4 yerine 3 yaparsanız doğal olarak süre uzayacak.

Daha fazla örnek için https://github.com/krakjoe/pthreads/tree/master/examples

2 yorum:

Celal Şahin Altınışık dedi ki...

Merhaba,
Thread kullanımı php'nin hangi versiyonunda denenmiştir? Codeiginiter yapısında çalışmaktamıdır?

Volkan dedi ki...

Merhaba,

Bu örnek php 55 de denendi. Bağımsız bir yapı olarak entegre edebilirsiniz.

Şurada daha fazla örnek bulabilirsiniz https://github.com/krakjoe/pthreads