PHP下使用多线程

来源:互联网 发布:淘宝货到付款先发货 编辑:程序博客网 时间:2024/06/09 01:04

本文以Windows为例,讲解安装和使用php_pthreads扩展。

1.安装pthreads

打开 http://localhost/?phpinfo=1 找到 ‘PHP Extension Build’ 的版本

PHP Extension Build
去 http://windows.php.net/downloads/pecl/releases/pthreads/ 上下载与你的php对应版本的 pthreads (要区分是 32 bit 还是 64 bit) 和 php extension build (本文使用的是 VC11)。解压 php_pthreads-2.0.9-5.6-ts-vc11-x64.zip

  • 复制 php_pthreads.dll 到 ‘bin\php\ext\’ 安装目录
  • 复制 pthreadVC2.dll 到 ‘bin\php\’ 安装目录
  • 复制 pthreadVC2.dll 到 ‘bin\apache\bin’ 安装目录
  • 复制 pthreadVC2.dll 到 ‘C:\windows\system32’ 安装目录

配置 php.ini 文件,新增一行:

extension=php_pthreads.dll

重启 Apache 并查看 phpinfo() 来确认是否安装成功。
这里写图片描述

2. 基于 Pthreads 扩展的多线程示例

如下例子引用 http://blog.phpha.com/archives/54/,打印 1 - 99,每次打印之间间隔 100ms。

<?php/** * 多线程示例 * @author PHPHa<mail@phpha.com> * @date 2016年8月15日 * @copyright http://blog.phpha.com *///继承父类class Test extends Thread{    public function __construct($arg){        $this->arg = $arg;    }    public function run(){        if($this->arg){            //休眠[100]毫秒/否则效果不明显            usleep(100000);            echo $this->arg, PHP_EOL;        }    }}//多线程版本$script_stime = getMicroTime();//创建线程for($i = 0; $i < 100; $i++){    $pool[$i] = new Test($i);    $pool[$i]->start();}//线程同步foreach($pool as $work){    while($work->isRunning()){        usleep(10);    }    $work->join();}//输出执行时间echo '[多线程]', outputTimes(), PHP_EOL;//脚本开始时间$script_stime = getMicroTime();//单线程版本for($i = 0; $i < 100; $i++){    $Obj = new Test($i);    $Obj->run();}//输出执行时间echo '[单线程]', outputTimes(), PHP_EOL;//GET_MICRO_TIMEfunction getMicroTime(){    return round(microtime(true), 3);}//OPTPUT_EXECUTE_TIMESfunction outputTimes(){    global $script_stime;    return sprintf('EXECUTE_TIMES: %.3fs', getMicroTime() - $script_stime);}

结果如下:
这里写图片描述

[多线程] EXECUTE_TIMES: 0.760s
[单线程] EXECUTE_TIMES: 10.091s

原创粉丝点击