Edited at

様々な言語における並行、並列処理(PHP編)

More than 1 year has passed since last update.

PHPは最近の他の言語とは違ってシングルスレッドなので、一回のリクエストで複数の処理を同時に実行したりといったことは通常はできない。


プロセスフォーク


process_fork

<?php

$pid = pcntl_fork();
if($pid == -1){
die("Cannot fork");//フォーク失敗
}else if($pid){
echo "I am parent!\n";//親プロセス側
pcntl_wait($status);//子プロセス終了を待機しゾンビプロセス化を防ぐ
}else{
echo "I am child!\n";//子プロセス側
}
?>


マルチスレッドプログラミング

ここではpthreadsモジュールを用いる。


pthread

<?php

class ThreadTest extends Thread{//Threadを継承したクラスがスレッドオブジェクトに
//start時に呼び出される
public function run(){
sleep(10);//10秒待機
echo "Thread finished.\n";
}
}
$th1 = new ThreadTest();
$th1->start();//開始

var_dump($th1->isRunning());//Thread::runがまだ実行中か->true

$th1->join();//スレッドが終わるまで待機

//$th1->kill(); //スレッドの強制終了。非推奨

echo "Finished.\n"
?>

>引用: http://qiita.com/rana_kualu/items/02f380f2f3d5020051bb