本文实例讲述了PHP多进程编程。分享给大家供大家参考,具体如下:

第一步:
$ php -m 命令查看php是否安装pcntl 和 posix扩展,若没有则安装
使用场景:
1. 要进行大量的网络耗时的操作
2. 要做大量的运算,并且,系统有多个cpu,为了让用户有更快的体验,把一个任务,分成几个小任务,最后合并。
多进程常用函数:
pcntl_alarm — 为进程设置一个alarm闹钟信号
pcntl_errno — 别名 pcntl_strerror
pcntl_exec — 在当前进程空间执行指定程序
pcntl_fork — 创建子进程,在当前进程当前位置产生分支(子进程)。译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。
pcntl_get_last_error — Retrieve the error number set by the last pcntl function which failed
pcntl_getpriority — 获取任意进程的优先级
pcntl_setpriority — 修改任意进程的优先级
pcntl_signal_dispatch — 调用等待信号的处理器
pcntl_signal — 安装一个信号处理器
pcntl_sigprocmask — 设置或检索阻塞信号
pcntl_sigtimedwait — 带超时机制的信号等待
pcntl_sigwaitinfo — 等待信号
pcntl_strerror — Retrieve the system error message associated with the given errno
pcntl_wait — 等待或返回fork的子进程状态
pcntl_waitpid — 等待或返回fork的子进程状态
pcntl_wexitstatus — 返回一个中断的子进程的返回代码
pcntl_wifexited — 检查状态代码是否代表一个正常的退出。
pcntl_wifsignaled — 检查子进程状态码是否代表由于某个信号而中断
pcntl_wifstopped — 检查子进程当前是否已经停止
pcntl_wstopsig — 返回导致子进程停止的信号
pcntl_wtermsig — 返回导致子进程中断的信号
实例一:
<?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo '原始父进程:' . $parentPid . PHP_EOL;
//创建子进程,返回子进程id
$pid = pcntl_fork();
if( $pid == -1 ){
exit("fork error");
}
//pcntl_fork 后,父进程返回子进程id,子进程返回0
echo 'ID : ' . $pid . PHP_EOL;
if( $pid == 0 ){
//子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程
$mypid = getmypid(); // 用getmypid()函数获取当前进程的PID
echo 'I am child process. My PID is ' . $mypid . ' and my fathers PID is ' . $parentPid . PHP_EOL;
} else {
//父进程fork之后,返回的就是子进程的pid号,pid不为0
echo 'Oh my god! I am a father now! My childs PID is ' . $pid . ' and mine is ' . $parentPid . PHP_EOL;
}
$aa = shell_exec("ps -af | grep index.php");
echo $aa;
实例二:开多个子进程,避免fork泛滥
<?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo '原始父进程:' . $parentPid . PHP_EOL;
//开启十个子进程
for($i = 0; $i < 10; $i++) {
$pid = pcntl_fork();
if($pid == -1) {
echo "Could not fork!\n";
exit(1);
}
//子进程
if(!$pid) {
//child process workspace
echo '子进程:' . getmypid() . PHP_EOL;
exit(); //子进程逻辑执行完后,马上退出,以免往下走再fork子进程,不好控制
} else {
echo '父进程:' . getmypid() . PHP_EOL;
}
}
echo getmypid() . PHP_EOL;
$aa = shell_exec("ps -af | grep index.php");
echo $aa;
注意:
通过pcntl_XXX系列函数使用多进程功能。注意:pcntl_XXX只能运行在php CLI(命令行)环境下,在web服务器环境下,会出现无法预期的结果,请慎用!
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
# PHP
# 多进程
# PHP多进程之pcntl_fork的实例详解
# PHP基于文件锁解决多进程同时读写一个文件问题示例
# 分享PHP-pcntl 实现多进程代码
# PHP多进程编程总结(推荐)
# PHP并发多进程处理利器Gearman使用介绍
# 以实例全面讲解PHP中多进程编程的相关函数的使用
# PHP多进程编程之僵尸进程问题的理解
# 的是
# 多个
# 操作技巧
# 几个
# 相关内容
# 感兴趣
# 要做
# 给大家
# 更快
# 不为
# 会再
# 更多关于
# 所述
# 完后
# 命令行
# 程序设计
# 值为
# 过程中
# 往下走
# 编程技巧
相关文章:
,制作一个手机app网站要多少钱?
广平建站公司哪家专业可靠?如何选择?
建站之星导航配置指南:自助建站与SEO优化全解析
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
淘宝制作网站有哪些,淘宝网官网主页?
如何高效生成建站之星成品网站源码?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
动图在线制作网站有哪些,滑动动图图集怎么做?
威客平台建站流程解析:高效搭建教程与设计优化方案
C#如何序列化对象为XML XmlSerializer用法
ui设计制作网站有哪些,手机UI设计网址吗?
如何在局域网内绑定自建网站域名?
如何在景安服务器上快速搭建个人网站?
简单实现Android验证码
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
建站之星安装步骤有哪些常见问题?
如何选择香港主机高效搭建外贸独立站?
如何通过主机屋免费建站教程十分钟搭建网站?
红河网站制作公司,红河事业单位身份证如何上传?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站VPS配置与SEO优化指南:关键词排名提升策略
如何用PHP快速搭建高效网站?分步指南
如何通过FTP空间快速搭建安全高效网站?
网页设计与网站制作内容,怎样注册网站?
如何撰写建站申请书?关键要点有哪些?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何通过建站之星自助学习解决操作问题?
如何在阿里云ECS服务器部署织梦CMS网站?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
c# 在ASP.NET Core中管理和取消后台任务
网站制作模板下载什么软件,ppt模板免费下载网站?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
C++如何编写函数模板?(泛型编程入门)
三星网站视频制作教程下载,三星w23网页如何全屏?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
常州自助建站费用包含哪些项目?
如何在阿里云虚拟主机上快速搭建个人网站?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
css网站制作参考文献有哪些,易聊怎么注册?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
北京制作网站的公司,北京铁路集团官方网站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何彻底删除建站之星生成的Banner?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
*请认真填写需求信息,我们会在24小时内与您取得联系。