千家信息网

PHP多进程的原理和使用方法

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容介绍了"PHP多进程的原理和使用方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!准备我们都
千家信息网最后更新 2025年02月04日PHP多进程的原理和使用方法

本篇内容介绍了"PHP多进程的原理和使用方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

准备

我们都知道PHP是单进程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守护进程时,多进程的优势不用多说。

PHP的多线程也曾被人提及,但进程内多线程资源共享和分配的问题难以解决。PHP也有多线程想关的扩展 pthreads ,但据说不太稳定,且要求环境为线程安全,所用不多。

以前PHP群里的一位大神曾指导说后台PHP想进阶必然避不开多进程,正好公司里的守护进程也应用了PHP的多进程,结合着谷哥的各种资料和手册,总算理解了多进程,并自己写了一个小demo(在linux系统上实现的),用此文总结一下,如有错漏,谢谢提出。

要实现PHP的多进程,我们需要两个扩展 pcntl和 posix,安装方法这里不再赘述


创建子进程

创建PHP子进程是多进程的开始,我们需要pcntl_fork()函数;

fork函数详解

pcntl_fork() - 在当前进程当前位置产生分支(子进程)。此函数创建了一个新的子进程后,子进程会继承父进程当前的上下文,和父进程一样从pcntl_fork()函数处继续向下执行,只是获取到的pcntl_fork()的返回值不同,我们便能从判断返回值来区分父进程和子进程,分配父进程和子进程去做不同的逻辑处理。

pcntl_fork()函数成功执行时会在父进程返回子进程的进程id(pid),因为系统的初始进程init进程的pid为1,后来产生进程的pid都会大于此进程,所以我们可以通过判断pcntl_fork()的返回值大于1来确实当前进程是父进程;

而在子进程中,此函数的返回值会是固定值0,我们也可以通过判断pcntl_fork()的返回值为0来确定子进程;

而pcntl_fork()函数在执行失败时,会在父进程返回-1,当然也不会有子进程产生。

fork进程实例

以下是fork子进程的一个简单的小例子:

$ppid = posix_getpid();    $pid = pcntl_fork();    if ($pid == -1) {        throw new Exception('fork子进程失败!');    } elseif ($pid > 0) {        cli_set_process_title("我是父进程,我的进程id是{$ppid}.");     sleep(30); // 保持30秒,确保能被ps查到    } else {        $cpid = posix_getpid();        cli_set_process_title("我是{$ppid}的子进程,我的进程id是{$cpid}.");        sleep(30);    }

这时介绍一下两个函数:

posix_getpid():获取当前进程的pid;

cli_set_process_title('响亮的名字'):为当前进程取一个响亮的名字。

运行这个例子,我们便能看到当前两个PHP进程了。

"PHP多进程的原理和使用方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

进程 函数 线程 方法 两个 后台 处理 使用方法 原理 不同 响亮 例子 内容 可以通过 名字 更多 知识 系统 分配 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 后台服务器如何管理网站 农安智能化网络技术咨询有哪些 云服务器实现复制粘贴 网络安全公安简报 网易邮箱接收服务器 团队作战代码管理服务器 河北程序软件开发编程 浪潮服务器管理口账号 软件开发后端怎么发展 广东智能软件开发设计 rust服务器假人在哪里买 shell服务器怎么退出 电信服务器系统日志会永久保存吗 应编写网络安全防护方案 数据库in join 服务器扩展硬盘 信息化执法和网络安全联动 融入让她软件开发软 丹江口服务软件开发学习 深圳执象软件开发有限公司 为什么不能用本地服务器名称 关系型数据库的四类完整性规则 在计算机网络技术中ptr 农业网络安全措施 服务器能跑多少个docker 河北程序软件开发编程 工科局网络安全保障工作总结报告 DNS服务器有哪些安全吗 网络安全法 网络运营者包括 集团网络安全宣传周活动总结
0