windows环境下PHP7.4多线程设置

news/2024/11/30 9:41:05/

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.dllphp主程序目录下。
在这里插入图片描述
php/ext路径添加到系统路径中。
在这里插入图片描述
大家根据自己php实际的路径进行添加系统路径。

4.验证

首先重命名php-7.4.33-Win32-vc15-x64目录下的php.ini-developmentphp.ini,然后打开该文件在Dynamic Extensions 选项下添加extension=parallel,如下图。
在这里插入图片描述
添加完成后保存文件,打开小皮选择开启php.
在这里插入图片描述
重启apache重启网站。
在这里插入图片描述
在小皮的www目录下新建一个普通的a.php文件,这个php文件是用来被多线程调用的。

<?phpecho "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){//线程1sleep(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){//线程2echo "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 (){//线程3echo "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的多线程就配置好了。

在这里插入图片描述


http://www.ppmy.cn/news/1205525.html

相关文章

innovus:解决报告复制时一行拆成两行的问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; innovus复制报告时一行的东西出现在两行上&#xff0c;解决只需要一条命令: set_table_style -no_frame_width

FlinK之检查点与保存点机制

检查点与保存点 检查点Checkpoint概述保存时机保存与恢复检查点算法 检查点配置启用检查点指定存储位置其它配置通用增量 保存点Savepoint概述使用保存点切换状态后端 检查点Checkpoint 概述 在 Flink 中&#xff0c;检查点是用于实现状态一致性和故障恢复的关键机制。检查点功…

【MySQL数据库】 七

本文主要介绍了Java的JDBC编程的过程. 超详细 !!! 一.JDBC JDBC就是通过Java代码,来操作数据库 由于我们在实际开发中,绝大部分都是用代码来操作数据库的 , 因此一个成熟的数据库,都会提供一些API让程序员来使用. 常见的数据库比如mysql / oracl / sqlserver / SQLite 都会提…

git clone单个文件/文件夹、wget下载单文件

文章目录 1. 暂时没找到方法用git命令方便地clone单个文件/文件夹2. 通过wget手动下载单个文件 1. 暂时没找到方法用git命令方便地clone单个文件/文件夹 复杂&#xff0c;未测试 https://www.cnblogs.com/impw/p/15629514.html 2. 通过wget手动下载单个文件 在github/gitee网…

10 # 手写 every 方法

every 使用 every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值。 ele&#xff1a;表示数组中的每一个元素index&#xff1a;表示数据中元素的索引array&#xff1a;表示数组 <script>var arr [1, 3, 5, 7, 8];var result arr.ever…

3D全景技术,为我们打开全新宣传领域

随着科技的发展&#xff0c;3D全景技术正在融入我们的生活&#xff0c;这种全新视觉体验方式为我们打开了一扇全新的宣传领域&#xff0c;可以让我们多方位、多视角地探索各个行业&#xff0c;无论是对教育、商业、还是其他领域&#xff0c;都产生了深远的影响。 3D全景技术结合…

基于JavaWeb+SpringBoot+微信小程序的酒店商品配送平台系统的设计和实现

基于JavaWebSpringBoot微信小程序的酒店商品配送平台系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 本章内容概括了基于微信小程序的酒店商品配送平台的可行性分析、系统功…

小程序游戏对接广告收益微信小游戏抖音游戏软件

小程序游戏对接广告是一种常见的游戏开发模式&#xff0c;开发者可以通过在游戏中嵌入广告来获取收益。以下是一些与小程序游戏对接广告收益相关的关键信息&#xff1a; 小程序游戏广告平台选择&#xff1a; 选择适合你的小程序游戏的广告平台非常重要。不同的平台提供不同类型…