我想用PHP控制WIN服务器自带DNS服务器来动态生成解析记录,经测试单线程效率极低,等待时间长,于是考虑用多线程,下了个pthread扩展,用以下代码进行测试,感觉还是不是多线程的效果。尤其是线程多了,发现和串行效率差不多<?php
class recordadd extends Thread {
public function __construct($domainhead,$stime){
$this->domainhead = $domainhead;
$this->stime = $stime;
}
public function run(){
$timediff=microtime(true)-$this->stime;
echo($this->domainhead." start at $timediff<br>");//这个时间随着线程数量的增大而增大,很奇怪,感觉根本不像是并发执行
exec("dnscmd . /recordadd example.com $this->domainhead A 2.2.2.2",$out);
//usleep(2000000);//假如去掉exec用这个函数,使用起来发现总运行时间缩小了,像是并发执行
$timediff=microtime(true)-$this->stime;
echo($this->domainhead." end at $timediff<br>");//这个时间也随着线程数量的增大而增大,而且线程越多,结束时间越久,照理说多线程每个线程运行时间应该是和只有一个线程运行时间是一样的啊
}
}
$stime=microtime(true);
$num=100; //线程数量
for($i=0;$i<$num;$i++)
{
$thread[$i] = new recordadd("a".$i,$stime);
$thread[$i]->start();
}
for($i=0;$i<$num;$i++)
{
$thread[$i]->join();
}echo("all done");
?>这段代码目前运行起来是串行效果,如何达到并行效果,如何实现提高效率,请大神指导
class recordadd extends Thread {
public function __construct($domainhead,$stime){
$this->domainhead = $domainhead;
$this->stime = $stime;
}
public function run(){
$timediff=microtime(true)-$this->stime;
echo($this->domainhead." start at $timediff<br>");//这个时间随着线程数量的增大而增大,很奇怪,感觉根本不像是并发执行
exec("dnscmd . /recordadd example.com $this->domainhead A 2.2.2.2",$out);
//usleep(2000000);//假如去掉exec用这个函数,使用起来发现总运行时间缩小了,像是并发执行
$timediff=microtime(true)-$this->stime;
echo($this->domainhead." end at $timediff<br>");//这个时间也随着线程数量的增大而增大,而且线程越多,结束时间越久,照理说多线程每个线程运行时间应该是和只有一个线程运行时间是一样的啊
}
}
$stime=microtime(true);
$num=100; //线程数量
for($i=0;$i<$num;$i++)
{
$thread[$i] = new recordadd("a".$i,$stime);
$thread[$i]->start();
}
for($i=0;$i<$num;$i++)
{
$thread[$i]->join();
}echo("all done");
?>这段代码目前运行起来是串行效果,如何达到并行效果,如何实现提高效率,请大神指导
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货