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);?>
相关文章:
PHP多线程模块parallel的编译安装和多线程编程演示
从PHP7开始,多线程编原有的pthreads已经不在维护,而是使用parallel替代。 由于是新的模块,样例代码很少,这里总结一个简单的代码和详细的备注供大家参考。 编译和安装 parallel需要启用ZTS(Zend Thread Safety&…...
记录grid布局属性
grid布局 分为容器和项目元素 容器属性 #container{display:grid;grid-template-columns:100px 100px 100px;/* 1fr 表示比例为占1份 */grid-template-columns:1fr 100px 1fr;/*100px为1列,自动填充,容器宽度不足则换行*/grid-template-columns:repeat(auto-fill,100px);/* …...
12.爬虫---PyMysql安装与使用
12.PyMysql安装与使用 1.安装 PyMySQL2.使用PyMySQL2.1创建数据表2.2连接数据库2.3增加数据2.4修改数据2.5查询数据2.6删除数据2.7关闭连接 3.总结 MySQL 安装可以看这篇文章MySql 安装与使用(非常详细) 1.安装 PyMySQL PyMySQL是Python中用于连接MySQL…...
VS2022遇到的两个问题
问题一:找不到定义的头文件 别的博主说是:在属性页里面进行改写,改成是,我试过之后并不行; 解决思路:但其实在右边视图里面找到你自己定义的头文件加到你运行文件中就行;因为程序就只有一个入口…...
【Android14 ShellTransitions】(六)SyncGroup完成
这一节的内容在WMCore中,回想我们的场景,是在Launcher启动某一个App,那么参与动画的就是该App对应Task(OPEN),以及Launcher App对应的Task(TO_BACK)。在确定了动画的参与者后&#x…...
技术管理转型之战:决策之道-管理中的智慧与策略
文章目录 引言一、决策的重要性二、常见的决策方式1. 理性决策(Rational Decision Making)2. 有限理性(Bounded Rationality)3. 直觉决策(Intuitive Decision Making)4. 循证管理(Evidence-Base…...
Shell脚本:条件语句(if、case)
目录 硬编码 硬编码的缺点 条件判断 $? 命令行语句 判断指定目录是否存在 判断指定文件是否存在 判断指定对象是否存在 表达式形式语句 判断对象是否存在 判断对象是否有权限 与、或、非 运算 与运算 或运算 非运算 比较大小 判断磁盘利用率实验步骤 字符串…...
在Linux上为Windows目标配置Qt交叉编译
问题描述 我想使用Linux x86_64主机为Windows x86_64目标交叉编译Qt库(最终也包括我的应用程序)。我觉得自己已经接近成功了,但可能对整个过程有一些基本的误解。 我从在我的Fedora机器上安装所有mingw包开始,并修改了win32-g的…...
Introduction to linear optimization 第 2 章课后题答案 11-15
线性规划导论 Introduction to linear optimization (Dimitris Bertsimas and John N. Tsitsiklis, Athena Scientific, 1997), 这本书的课后题答案我整理成了一个 Jupyter book,发布在网址: https://robinchen121.github.io/manual-introdu…...
Java——包
一、包 1、简要介绍 在Java编程语言中,包(Package) 是一种用来组织和管理类(Class)和接口(Interface)的机制。包为开发者提供了一种逻辑分组的方式,使代码更加模块化、结构化和易于…...
Pipeline知识小记
在scikit-learn(通常缩写为sklearn)中,Pipeline是一个非常重要的工具,它允许你将多个数据转换步骤(如特征选择、缩放等)和估计器(如分类器、回归器等)组合成一个单一的估计器对象。这…...
postman国内外竞争者及使用详解分析
一、postman简介 Postman 是一款广泛使用的 API 开发和测试工具,适用于开发人员和测试人员。它提供了一个直观的界面,用于发送 HTTP 请求、查看响应、创建和管理 API 测试用例,以及自动化 API 测试工作流程。以下是 Postman 的主要功能和特点…...
人工智能对决:ChatGLM与ChatGPT,探索发展历程
图: a robot is writing code on a horse, By 禅与计算机程序设计艺术 目录 ChatGLM:...
探索Python元类的奥秘及其应用场景
探索Python元类的奥秘及其应用场景 一、引言 在Python中,元类(Metaclasses)是一个相对高级且容易被忽视的主题。然而,对于深入理解Python的面向对象编程模型以及进行高级框架和库的设计来说,元类是一个不可或缺的工具…...
C语言基础关键字的含义和使用方法
关键字在C语言中扮演着非常重要的角色,它们定义了语言的基本构造和语法规则,通过使用关键字,开发者可以创建变量、定义数据类型、控制程序流程(如循环和条件判断)、声明函数等。由于这些字是保留的,所以编…...
【Golang - 90天从新手到大师】Day09 - string
系列文章合集 Golang - 90天从新手到大师 String 一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据,但是通常是用来包含人类可读的文本。 len()返回字符串字节数目(不是rune数)。 通过索引可以访问某个字节值,0…...
网络安全与区块链技术:信任与安全的融合
# 网络安全与区块链技术:信任与安全的融合 在网络空间,信任是一种宝贵而稀缺的资源。区块链技术以其独特的分布式账本、加密算法和共识机制,为构建网络安全提供了新的解决方案。本文将探讨网络安全与区块链技术如何融合,以增强信…...
MySQL之复制(九)
复制 复制管理和维护 确定主备是否一致 在理想情况下,备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误,备库同样可能因为MySQL自身的特性导致数据不一致,例如MySQL的Bug、网络中断、服务…...
【面试干货】 Java 中的 HashSet 底层实现
【面试干货】 Java 中的 HashSet 底层实现 1、HashSet 的底层实现2、 HashSet 的特点3、 总结 💖The Begin💖点点关注,收藏不迷路💖 HashSet 是 Java 集合框架中的一个重要成员,它提供了不存储重复元素的集合。但是&am…...
爬虫经典案例之爬取豆瓣电影Top250(方法二)
在上一篇文章的基础上,改进了代码质量,增加了多个正则表达式匹配,但同事也增加了程序执行的耗时。 from bs4 import BeautifulSoup import requests import time import re from random import randint import pandas as pdurl_list [https…...
用Multisim 14.0和AD620/OP07,手把手教你搭建一个能用的简易心电放大电路
从零开始构建心电放大电路:Multisim 14.0与AD620/OP07实战指南 在生物医学信号处理领域,心电信号采集一直是极具挑战性的课题。想象一下,当医生将电极贴在你胸口时,那些微弱的电信号是如何被放大并转化为清晰波形图的?…...
Loop窗口管理工具:如何用径向菜单和智能暂存系统提升Mac多任务效率300%
Loop窗口管理工具:如何用径向菜单和智能暂存系统提升Mac多任务效率300% 【免费下载链接】Loop MacOS窗口管理 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 在当今多任务工作环境中,Mac用户经常面临窗口管理的挑战。每天在多个应用之间…...
全平台广告拦截神器:AdGuard扩展零门槛部署与优化指南
全平台广告拦截神器:AdGuard扩展零门槛部署与优化指南 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension 广告拦截技术已成为现代浏览器的必备能力,AdG…...
计算机毕业设计:Python二手车市场数据分析与价格预测系统 Django框架 随机森林 可视化 数据分析 汽车 车辆 大数据 hadoop(建议收藏)✅
1、项目介绍 技术栈 Python、Django、MySQL、机器学习随机森林算法、Echarts可视化、HTML、阿里云天池数据集 功能模块 注册登录界面不同车龄平均价格柱状图分析不同车龄数量分布饼图二手车售价分布饼图不同地区二手车平均价格柱状图分析里程价格折线图分析特征值和价格相关性分…...
从WordPress同步到数据库:一个真实案例拆解n8n节点间的“数据对话”
从WordPress到数据库:用n8n构建数据管道的实战解剖 当你点击WordPress后台的"发布"按钮时,一篇新文章如何穿越数字世界,精准落入目标数据库的表格中?这背后是一场由n8n节点编排的精密数据芭蕾。本文将带你走进一个真实的…...
如何轻松突破Cursor试用限制:免费高效的终极解决方案
如何轻松突破Cursor试用限制:免费高效的终极解决方案 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We h…...
主流推理引擎选型指南:从ONNX、OpenVINO到TensorRT与ncnn的实战场景解析
1. 主流推理引擎全景概览 第一次接触AI模型部署时,我对着各种推理引擎文档看得一头雾水。直到在真实项目中踩过几次坑才明白,选对推理引擎就像给赛车选轮胎——用错类型再好的引擎也跑不出速度。目前市面上主流的四大推理方案各有绝活:ONNX像…...
遥感数据处理避坑指南:实测光谱如何用Matlab匹配卫星波段(以GF-6为例)
遥感数据处理避坑指南:实测光谱如何用Matlab匹配卫星波段(以GF-6为例) 当你在野外辛苦采集的ASD高光谱数据与卫星影像比对时,是否遇到过这样的困惑:明明地面测量值看起来合理,但和卫星数据对比时却总存在难…...
5步让Windows 11提速51%:Win11Debloat深度净化指南
5步让Windows 11提速51%:Win11Debloat深度净化指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化和改善…...
终极免费开源图像修复工具:ComfyUI-BrushNet完整使用指南
终极免费开源图像修复工具:ComfyUI-BrushNet完整使用指南 【免费下载链接】ComfyUI-BrushNet ComfyUI BrushNet nodes 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BrushNet 想要快速掌握AI图像编辑的核心技术?ComfyUI-BrushNet作为一款…...
