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