首页 > 代码库 > php之多线程

php之多线程

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>";  

 php的pthread函数查询

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

 

php之多线程