php多任务程序实例解析
本文以实例简单解析了php多任务程序的实现方法,具体代码如下:
<?php
error_reporting(E_ALL);
set_time_limit(0);
/**
*php多任务程序的实现
*借助proc_open
*其实该叫进程(process)
*能启动多进程,你可以使用你的想象力做你想做的了,以后再写个能用的
*如果你是在linux上跑php,并且启用pcntl模块后,使用pcntl函数该更好
*
*/
classThread{
protected$_pref;//processreference
protectedstatic$_instance=null;
protected$_pipes;
privatefunction__construct(){
$this->_pref=0;
}
publicstaticfunctiongetInstance($file){
if(null==self::$_instance){
self::$_instance=newself;
}
$descriptor=array(
0=>array("pipe","r"),
1=>array("pipe","w"),
2=>array("file","./error-output.txt","a"),
);
self::$_instance->_pref=proc_open("php-q$file",$descriptor,self::$_instance->_pipes);
returntrue;
}
publicfunction__destruct(){
proc_close($this->_pref);
$this->_pref=null;
}
}
//测试代码
$file=__FILE__;
if(empty($argv[1])){
$t2=Thread::getInstance("$file1");
$t3=Thread::getInstance("$file2");
$t4=Thread::getInstance("$file3");
$t5=Thread::getInstance("$file4");
$t5=Thread::getInstance("$file5");
$t5=Thread::getInstance("$file6");
$t2=Thread::getInstance("$file7");
$t3=Thread::getInstance("$file8");
$t4=Thread::getInstance("$file9");
$t5=Thread::getInstance("$file10");
$t5=Thread::getInstance("$file11");
$t5=Thread::getInstance("$file12");
echo"Mainthreaddone\n";
}else{
$somecontent="\r\n//~~~~~~~~~~~~-这次请求序号是:".$argv[1];
sleep(mt_rand(0,3));
$handle=fopen($file,'a+');
fwrite($handle,$somecontent);
}