码迷,mamicode.com
首页 > 编程语言 > 详细

php之多线程

时间:2014-12-01 14:06:28      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

php5.3或以上,且为线程安全版本。apache和php使用的编译器必须一致。
通过phpinfo()查看Thread Safety为enabled则为线程安全版。
通过phpinfo()查看Compiler项可以知道使用的编译器。
x86代表32位的,要保证编译器和位数相同还有php版本也需要相同
2.0.8代表pthreads的版本。
5.3代表php的版本。
ts表示php要线程安全版本的
 
pthread扩展下载地址
 
复制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>";  

 php的pthread函数查询

http://php.net/manual/zh/class.thread.php

 

php之多线程

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/xueyuwyz/p/4134892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!