ipc - PHP 进程间通信各种通信方式间的优劣之分??
迷茫
迷茫 2017-04-11 09:21:20
0
2
514

目前我所了解的进程间通信的方式有:

1. PHP 消息队列(sysvmsg 扩展)
我的理解: 消息是一次性消耗品。一个进程向消息队列发送消息后,这个消息只能够被另一个进程接收,接收后,这个消息就彻底从消息队列中被去除了,其他进程就无法在访问了,所以,我认为消息队列是一次性消耗品。不适用于一个进程向多个进程广播内容的这种情况,不是很理想....

2. 信号量 + 共享内存
我的理解: 信号量实现资源的互斥,共享内存实现进程间通信。但是我担心,共享内存受到内存大小限制,或许不适用于某些场景。

3. 管道(有名管道,无名管道暂时不知道如何创建)
我的理解: 管道每次都是想管道文件末尾添加内容,读取的时候却只能从头读取到尾部,且在读取管道数据的时候,若是 提供了读取长度的条件,那么在管道内容的数据不足这个长度的时候,其会等到管道的内容有足够的内容时,才能够读取到内容,读取的时候,内容大多是被截断的这种情况.....非常令人无语!

4. socket 通信
前一段时间了解过,都是游离在表层,连自己的理解都谈不上...汗!

问题1:

以上的理解纯属个人理解,都是从实际写代码,看结果,得到的认知,具体正确性未知。麻烦先做一下指正分析,谢谢。

问题2:

不知道还有没有其他的进程间通信方式??

问题3:

请精简分析下各进程间通信方式的优缺点、用途(很重要...方式越多,选择性越多,选择难度越大!)

问题4:

我之所以了解PHP-cli,Linux,shell,pcntl等多进程扩展,进程间通信方式等,其最终目的是想:实现类似 QQ 的通信功能。而做这个功能我个人觉得应该可以极大程度的提高对高并发的认知(因为可以用多进程来模拟高并发,到时无论是cpu占用率,内存,数据库性能肯定都会暴露出令人感兴趣的表现),以及如何测量一个网站的访问规模(应该高并发下的网站表现,就确定了其访问规模大小),最重要的是还是对网络通信会有较深入的了解吧....请结合前面我所描述的假想,劳烦分析其正确性及可执行性,最好还是能提供较完备的实现 通信功能 所需的相关技术,谢谢...!
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(2)
刘奇

进程间通信的内容不少,不好一字一字的敲,毕竟可以写很长一大篇博客了。而且这么重要的知识点,我建议你还是去看书。 进程间通信php的书籍肯定是没有的,因为这本质是操作系统提供的接口.
我给你推荐一本书吧,unix环境高级编程 第15章 就是进程间通信。你肯定会喜欢的。
不过你的需求不光是做进程间通信,你如果想做qq服务端的话,你需要学习很多linux系统原理方面的东西,进程通信只是里面很重要的一块.

你学习的态度肯定是值得肯定的,不过你如果真想立即实现这个,也完全没必要自己写,毕竟你学完到写出一个高可用的服务还是一个漫长的时间。 php里面现在有两个不错的额socket网络框架:swoole,workerman.
swoole是用c语言实现的且以php扩展的形式使用的,性能方面要比workerman更高一些.
workerman是纯php实现的,也是很稳定的.而且你也可以参照里面的源码进行学习.

用这两个框架你可以轻松实现你的需求:tcpserver

阿神

好问题。赞一个!

回答1:

传统应用(不仅限于php),常用匿名管道,命名管道、共享内存、窗口消息等方式来实现进程通讯。但是php不一样,php是收到一次请求运行一次,运行完就结束进程,并不适用传统的进程通讯方式。

回答2:

php中,或者说web后端开发中,redis订阅发布、数据库轮询的进程通讯方式使用比较多,因为web开发,执行效率永远不是首要考虑。而使用redis这样的第三方工具,可以实现分布式通讯。在不同的机器上,进程间也可以通讯。

回答3:

上面提到的很多进程通讯方式,要么不适用于web,要么不适用于php,但是redis却是广泛采用的。且没有什么致命缺陷。所以我建议使用这种方式。其他web开发者也容易理解,容易参与。不至于你写出一个工具却只能孤芳自赏。

回答4:

再精妙的技术选型也会有其并发上限。而web的分布式架构理论上是可以无限扩展的。所以某个技术的执行效率不再会成为整个应用的瓶颈。

如有意见,欢迎指正

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal