windows环境下的PHP设置多线程时有一定的难度,难点主要是PHP版本的选择,多线程扩展的选择,以及相关的设置等。
环境
- windows 10
- php-7.4.33-Win32-vc15-x64
- php_parallel-1.1.4-7.4-ts-vc15-x64
- phpstudy 8.1.1.2
为了快速的部署PHP环境,我直接使用了小皮,但是小皮并不是关键因素,只是用它快速提供了apache.本文所使用软件如下图。
1.下载php
php的版本一定是TS版的NTS版的不支持多线程。大家直接下载php-7.4.33-Win32-vc15-x64就可以了,其他很多版本我都试过没有成功。
php-7.4.33-Win32-vc15-x64下载
2.解压到小皮的扩展目录下
将下载的PHP解压后复制到你的小皮的解压目录下Extensions\php
目录下,下图是我的解压目录,供大家参考。
3.下载parallel扩展
pthreads已经不再支持php7.4了,需要使用新的parallel扩展,注意parallel扩展的版本一定要和php的版本对应上,大家可以直接使用本文中提及的版本。
php_parallel-1.1.4-7.4-ts-vc15-x64.zip下载
将压缩包解压后,复制php_parallel.dll
到你的php/ext
目录下。
复制pthreadVC2.dll
到php
主程序目录下。
将php/ext
路径添加到系统路径中。
大家根据自己php实际的路径进行添加系统路径。
4.验证
首先重命名php-7.4.33-Win32-vc15-x64
目录下的php.ini-development
为php.ini
,然后打开该文件在Dynamic Extensions
选项下添加extension=parallel,如下图。
添加完成后保存文件,打开小皮选择开启php.
重启apache重启网站。
在小皮的www目录下新建一个普通的a.php
文件,这个php文件是用来被多线程调用的。
<?php
echo "hello...";
example目录,并新建一个多线程调用的php文件,写入下面的代码。
<?php
header("Content-Type:text/html;charset=utf-8");
# a.php是被多线程调用的,路径根据实际书写
$r1=new \parallel\Runtime('D:\phpstudy_pro\WWW\a.php');
$r2=new \parallel\Runtime('D:\phpstudy_pro\WWW\a.php');
$a=5;
$future1=$r1->run(function ()use ($a){//线程1
sleep(1);
echo "this is thread1 start\n\r";
$a++;
echo "thread1 a is $a\n\r";
sleep(5);
echo "this is thread1 end\n\r";
return 1;
});
$future2=$r2->run(function ($p1){//线程2
echo "this is thread2 start\n\r";
sleep(5);
echo "thread2 a is $p1\n\r";
echo "this is thread2 end\n\r";
return 2;
},[$a]);//外部变量也可以通过第二个参数传入线程
$future3=$r2->run(function (){//线程3
echo "this is thread3 start\n\r";
sleep(5);
echo "this is thread3 end\n\r";
return 3;
});
echo "主线程开始\n\r";
echo "future1的值是:".$future1->value()."\n\r";
echo "future2的值是:".$future2->value()."\n\r";
echo "future3的值是:".$future3->value()."\n\r";
进入php主程序目录,打开一个命令窗口,运行以下代码(大家根据自己实际情况修改)。
php D:\phpstudy_pro\WWW\examples\test.php
如果出现下图的输出说明你的windows下的php7.4的多线程就配置好了。