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