php之多线程

全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:917篇文章
  • 发布时间:2017年01月16日 23:03:02
  • 所属分类:PHP+MySql
  • 阅读次数:2925次阅读
  • 标签:
php5.3或以上,且为线程安全版本。apache和php使用的编译器必须一致。
通过phpinfo()查看Thread Safety为enabled则为线程安全版。
通过phpinfo()查看Compiler项可以知道使用的编译器。
x86代表32位的,要保证编译器和位数相同还有php版本也需要相同
2.0.8代表pthreads的版本。
5.3代表php的版本。
ts表示php要线程安全版本的
 
pthread扩展下载地址
http://windows.php.net/downloads/pecl/releases/pthreads/2.0.9/
 
复制php_pthreads.dll 到目录 bin\php\ext\ 下面。(本人路径D:\wamp\bin\php\php5.3.10\ext)
复制pthreadVC2.dll 到目录 bin\php\ 下面。(本人路径D:\wamp\bin\php\php5.3.10)
复制pthreadVC2.dll 到目录 C:\windows\system32 下面。
打开php配置文件php.ini。在后面加上extension=php_pthreads.dll
提示!Windows系统需要将 pthreadVC2.dll 所在路径加入到 PATH 系统变量中。
C:\WINDOWS \system32\pthreadVC2.dll。
 

下面是一个测试代码:开启10个线程抓取百度内容,分别比较时间,多线程时间为1.520003080368秒,foreach循环抓取时间为3.1731760501862秒左右,cpu为四核处理器

<?php  
namespace Home\Controller;  
class test extends \Thread {      
    public $url;     
    public $result;          
    public function __construct($url) {         
        $this->url = $url;     
    }          
    public function run() {         
        if ($this->url) {             
            $this->result = model_http_curl_get($this->url);         
        }     
    } 
}  
function model_http_curl_get($url) {     
    $curl = curl_init();       
    curl_setopt($curl, CURLOPT_URL, $url);       
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);       
    curl_setopt($curl, CURLOPT_TIMEOUT, 5);       
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)');       
    $result = curl_exec($curl);       
    curl_close($curl);       
    return $result;   
}  
for ($i = 0; $i < 10; $i++) {     
    $urls[] = 'http://www.baidu.com/s?wd='. rand(10000, 20000); 
}   
/* 多线程速度测试 */ 
$t = microtime(true); 
foreach ($urls as $key=>$url) {     
    $workers[$key] = new test($url);     
    $workers[$key]->start(); 
}  
foreach ($workers as $key=>$worker) {     
    while($workers[$key]->isRunning()) {         
        usleep(100);       
    }     
    if ($workers[$key]->join()) {         
        var_dump($workers[$key]->result);     
    } 
} 
$e = microtime(true); 
echo "多线程耗时:".($e-$t)."秒<br>";     
/* 单线程速度测试 */ 
$t = microtime(true); 
foreach ($urls as $key=>$url) {     
    var_dump(model_http_curl_get($url)); 
} 
$e = microtime(true); 
echo "For循环耗时:".($e-$t)."秒<br>";

顶一下
(0)
100%
订阅 回复
踩一下
(0)
100%
» 固定链接:恒富网 » 《php之多线程》
» 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。

目前有 0 条留言 其中:访客:0 条, 博主:0 条

给我留言

您必须 [ 登录 ] 才能发表留言!