企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 进程通信 ****** 在各个进程中,内存空间都是不一致的,各个变量都是在不同的内如空间,举个简单的例子: > 用户 A 访问服务端,$_SESSION['user'] = 1; > 用户 B 同时访问服务端,读取$_SESSION['user']是读取不到的,因为进程之间内存不是相同的。 同时,在 php 多进程中,pcntl_fork 之后,虽然能读取到之前的变量,但这个变量是复制出来的一份,和原来那份存储位置根本不同,例如: ```php <?php $str = "EasySwoole\n"; $pid = pcntl_fork(); if ($pid > 0) { $str = 'huanghui\n'; // 在主进程修改了$str,不会影响到子进程的$str变量 echo $str; } elseif ($pid == 0) { echo $str; // $str 是 pcntl_fork复制出来的 } else { } ``` 所以,多进程中根本无法直接通信,那么,该怎么样才能通信呢?可以使用以下几种方式进行通信: * 管道通信,分为有名管道、无名管道等,可自行搜索了解详细。 * 消息队列通信,使用 linux 消息队列,通过 sysvmsg 扩展,可查看:[php进程通信-消息队列](http://blog.huanghui.xyz/2019/12/16/Swoole/Swoole%E5%9F%BA%E7%A1%80/php%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1-%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/) * 进程信号通信,可查看:[php进程通信-进程信号](http://blog.huanghui.xyz/2019/12/24/Swoole/Swoole%E5%9F%BA%E7%A1%80/php%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1-%E8%BF%9B%E7%A8%8B%E4%BF%A1%E5%8F%B7/) * 共享内存通信,映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 * 套接字通信 * 第三方通信,使用文件操作,mysql,redis等方法也可以实现通信。 可自行搜索了解详细内容。