简介:Pthreads 是一组允许用户在 PHP 中使用多线程技术的面向对象的 API。 它提供了创建多线程应用所需的全套工具,无论是 Web 应用还是控制台应用。 通过使用 Thread, Worker 以及 Threaded 对象,PHP 应用可以创建、读取、写入以及执行多线程应用,并可以在多个线程之间进行同步控制。
1. PHP-5.6 下 Pthreads 扩展的安装
本文以 Windows(Win7x64) 环境为例进行说明:
软件版本:Apache-2.4.20 (Win64) / PHP-5.6.22-ts
PHP 安装路径:E:\DEVENV\PHP-5.6.22
Pthreads 扩展下载地址:php_pthreads-2.0.9-5.6-ts-vc11-x64.zip
注:PHP 必须采用线程安全 (Thread Safety Enabled) 版本
[1] 解压下载的压缩文件
复制 [pthreadVC2.dll] 到 PHP 安装目录 [E:\DEVENV\PHP-5.6.22]
复制 [php_pthreads.dll] 到 PHP 扩展目录 [E:\DEVENV\PHP-5.6.22\ext][2] 配置 php.ini 文件
新增一行:
extension=php_pthreads.dll
重启 Apache 并查看 phpinfo() 来确认是否安装成功
2. 基于 Pthreads 扩展的多线程示例
<?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_TIME
function getMicroTime(){
return round(microtime(true), 3);
}
//OPTPUT_EXECUTE_TIMES
function outputTimes(){
global $script_stime;
return sprintf('EXECUTE_TIMES: %.3fs', getMicroTime() - $script_stime);
}
运行结果如下:
[多线程] EXECUTE_TIMES: 0.319s
[单线程] EXECUTE_TIMES: 9.900s
引用资料:
PHP-Pthreads 官方介绍