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程序设计有所帮助。