Welcome 微信登录

首页 / 网页编程 / PHP / PHP使用Pthread实现的多线程操作实例

本文实例讲述了PHP使用Pthread实现的多线程操作。分享给大家供大家参考,具体如下:
<?php class vote extends Thread {public $res= "";public $url= array();public $name= "";public $runing = false;public $lc = false;public function __construct($name) {$this->res= "暂无,第一次运行.";$this->param= 0;$this->lurl= 0;$this->name= $name;$this->runing = true;$this->lc = false;}public function run() {while ($this->runing) {if ($this->param != 0) {$nt = rand(1, 10);echo "线程[{$this->name}]收到任务参数::{$this->param},需要{$nt}秒处理数据.
";$this->res= rand(100, 999);sleep($nt);$this->lurl = $this->param;$this->param= "";} else {echo "线程[{$this->name}]等待任务..
";}sleep(1);}}}//这里创建线程池.$pool[] = new vote("a");$pool[] = new vote("b");$pool[] = new vote("c");//启动所有线程,使其处于工作状态foreach ($pool as $w) {$w->start();}//派发任务给线程for ($i = 1; $i < 10; $i++) {$worker_content = rand(10, 99);while (true) {foreach ($pool as $worker) {//参数为空则说明线程空闲if ($worker->param=="") {$worker->param = $worker_content;echo "[{$worker->name}]线程空闲,放入参数{$worker_content},上次参数[{$worker->lurl}]结果[{$worker->res}].
";break 2;}}sleep(1);}}echo "所有线程派发完毕,等待执行完成.
";//等待所有线程运行结束while (count($pool)) {//遍历检查线程组运行结束foreach ($pool as $key => $threads) {if ($worker->param=="") {echo "[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}].
";echo "[{$threads->name}]线程运行完成,退出.
";//设置结束标志$threads->runing = false;unset($pool[$key]);}}echo "等待中...
";sleep(1);}echo "所有线程执行完毕.
";
希望本文所述对大家php程序设计有所帮助。