PHP多进程编程实例详解
本文实例讲述了PHP多进程编程。分享给大家供大家参考,具体如下
第一步
$ php -m 命令查看php是否安装ptl 和 posix扩展,若没有则安装
使用场景
1. 要进行大量的网络耗时的操作
2. 要做大量的运算,并且,系统有多个cpu,为了让用户有更快的体验,把一个任务,分成几个小任务,合并。
多进程常用函数
ptl_alarm — 为进程设置一个alarm闹钟信号
ptl_errno — 别名 ptl_strerror
ptl_exec — 在当前进程空间执行指定程序
ptl_fork — 创建子进程,在当前进程当前位置产生分支(子进程)。译注fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。
ptl_get_last_error — Retrieve the error number set by the last ptl function which failed
ptl_getpriority — 获取任意进程的优先级
ptl_setpriority — 修改任意进程的优先级
ptl_signal_dispatch — 调用等待信号的处理器
ptl_signal — 安装一个信号处理器
ptl_sigprocmask — 设置或检索阻塞信号
ptl_sigtimedwait — 带超时机制的信号等待
ptl_sigwaitinfo — 等待信号
ptl_strerror — Retrieve the system error message associated with the given errno
ptl_wait — 等待或返回fork的子进程状态
ptl_waitpid — 等待或返回fork的子进程状态
ptl_wexitstatus — 返回一个中断的子进程的返回代码
ptl_wifexited — 检查状态代码是否代表一个正常的退出。
ptl_wifsignaled — 检查子进程状态码是否代表由于某个信号而中断
ptl_wifsped — 检查子进程当前是否已经停止
ptl_wssig — 返回导致子进程停止的信号
ptl_wtermsig — 返回导致子进程中断的信号
实例一
<?php //最早的进程,也是父进程 $parentPid = getmypid(); echo '原始父进程' . $parentPid . PHP_EOL; //创建子进程,返回子进程id $pid = ptl_fork(); if( $pid == -1 ){ exit("fork error"); } //ptl_fork 后,父进程返回子进程id,子进程返回0 echo 'ID : ' . $pid . PHP_EOL; if( $pid == 0 ){ //子进程执行ptl_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 = ptl_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;
注意
通过ptl_XXX系列函数使用多进程功能。注意ptl_XXX只能运行在php CLI(命令行)环境下,在web服务器环境下,会出现无法预期的结果,请慎用!
更多关于PHP相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家PHP程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程