当前位置: 首页 > news >正文

PHP多线程模块parallel的编译安装和多线程编程演示

从PHP7开始,多线程编原有的pthreads已经不在维护,而是使用parallel替代。

由于是新的模块,样例代码很少,这里总结一个简单的代码和详细的备注供大家参考。

编译和安装

parallel需要启用ZTS(Zend Thread Safety)的PHP构建版本(使用“--enable-zts”选项,或者在PHP 8.0.0之前的非Windows系统上使用“--enable-maintainer-zts”选项)。

1)下载PHP 7.2或8以上版本的源代码

2)下载parallel源代码,解压到php源代码的exc目录下,将parallel目录名命名为“parallel”

3)在php源码目录下按顺序执行如下命令:

./buildconf --force
./configure --enable-zts --enable-parallel --enable-fpm --with-curl --with-openssl
make
make install

其中配置选项--enable-zts --enable-parallel是必要的,其他根据自己需要增减。

安装完毕后,可以看到模块已经安装:

php -m
[PHP Modules]
...
parallel
...

 使用样例

<?phpuse \parallel\{Runtime, Future, Channel, Events};/*** 测试并发执行的函数。* 该函数模拟并发执行多个任务,并跟踪每个任务的执行情况,直到所有任务完成。* * @param int $concurrency 并发执行的任务数量。*/
function testConcurrency(int $concurrency) {// 定义一个睡眠函数,用于模拟耗时操作。$sleeper = function (int $seconds) {sleep($seconds);return $seconds;};// 初始化用于存储未来结果的数组和运行时对象的数组。$futureList = [];$runtimeList = [];// 创建指定数量的运行时对象。for ($i = 0; $i < $concurrency; $i++) {$runtimeList[] = new Runtime();}// 并发执行任务。foreach ($runtimeList as $i => $runtime) {$seconds = rand(1, 10);$futureList[$i] = $runtime->run($sleeper, [$seconds]);}// 监控所有任务直到完成。echo "loop... \n";while (true) {// 检查每个任务的状态。foreach ($futureList as $i => $runtime) {if ($runtime->done()) {$value = $runtime->value();echo "ThreadId: $i Sleep: $value seconds (End)\n";unset($runtimeList[$i]);}}// 打印当前运行中的任务数量,并休眠一段时间后继续检查。echo count($runtimeList) . " thread is running... \n";sleep(2);// 如果没有运行中的任务,则结束监控。if (empty($runtimeList)) break;}
}$concurrency = 5;testConcurrency($concurrency);?>

http://www.lryc.cn/news/379074.html

相关文章:

  • 记录grid布局属性
  • 12.爬虫---PyMysql安装与使用
  • VS2022遇到的两个问题
  • 【Android14 ShellTransitions】(六)SyncGroup完成
  • 技术管理转型之战:决策之道-管理中的智慧与策略
  • Shell脚本:条件语句(if、case)
  • 在Linux上为Windows目标配置Qt交叉编译
  • Introduction to linear optimization 第 2 章课后题答案 11-15
  • Java——包
  • Pipeline知识小记
  • postman国内外竞争者及使用详解分析
  • 人工智能对决:ChatGLM与ChatGPT,探索发展历程
  • 探索Python元类的奥秘及其应用场景
  • C语言基础关键字的含义和使用方法
  • 【Golang - 90天从新手到大师】Day09 - string
  • 网络安全与区块链技术:信任与安全的融合
  • MySQL之复制(九)
  • 【面试干货】 Java 中的 HashSet 底层实现
  • 爬虫经典案例之爬取豆瓣电影Top250(方法二)
  • 如何优化React应用的性能?
  • css文字镂空加描边
  • python数据分析与可视化
  • webkit 的介绍
  • make与makefile
  • 深度神经网络一
  • Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn
  • 汽车IVI中控开发入门及进阶(三十二):i.MX linux开发之Yocto
  • tessy 编译报错:单元测试时,普通桩函数内容相关异常场景
  • 计算机专业是否仍是“万金油”
  • 雷池社区版自动SSL