PHP多进程编程实例详解


Posted in PHP onJuly 19, 2017

本文实例讲述了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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
常见的PHP五种设计模式小结
Mar 23 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
php中explode的负数limit用法分析
Feb 27 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 #PHP
php实现生成code128条形码的方法详解
Jul 19 #PHP
php-beanstalkd消息队列类实例分享
Jul 19 #PHP
php+ajax实现异步上传文件或图片功能
Jul 18 #PHP
Joomla框架实现字符串截取的方法示例
Jul 18 #PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 #PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 #PHP
You might like
PHP文件锁定写入实例解析
2014/07/14 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
python 自动提交和抓取网页
2009/07/13 Python
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
Python Logging 日志记录入门学习
2018/06/02 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
行政经理岗位职责
2013/11/09 职场文书
最新党员思想汇报
2014/01/01 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
答谢酒会主持词
2015/07/02 职场文书
公司老总年会致辞
2015/07/30 职场文书
导游词之昭君岛
2020/01/17 职场文书
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js