php - 哪种沟通方式更有效

标签 php c++ linux performance ipc

服务器(LINUX)中运行着两个进程,分别是PHPApp和C++App。 PHPApp是PHP写的,C++App是C++写的。

现在他们需要相互通信来执行以下任务:PHPApp 向 C++App 发送请求,当 C++App 收到请求时,它从共享内存中读取数据并进行一些计算,最后返回数据到 PHPApp。

上面有两种方法:

  1. PHPApp 通过套接字与 C++App 通信。 C++App 将作为守护进程。
  2. PHPApp 通过调用 exec(...) 与 C++App 通信(php 有这样的功能)。在有来自 PHPApp 的请求之前,没有 C++App 进程,这样每个请求都需要一个 C++App 实例。

请问哪种方式效率更高?

更新
PHPApp 是基于 Apache 的服务器软件的一部分,因此可能有数百个 PHPApp 进程向 C++App 发送请求。 PHPApp 并行发出请求。

最佳答案

这完全取决于您要做什么。如果 C++App 像一个函数一样工作,因此 input -> C++App -> output 并且不经常调用 那么只调用 exec 并生成它是有意义的。

另一方面,如果 C++App 每分钟必须处理大量请求,而且是并行处理,那么将其构建为可以异步处理所有请求的守护进程更有意义。 (boost::asio 可以在这里帮助你)

为什么?因为 a) 通过套接字进行通信比每次生成一个新进程要便宜 b) 因为假设您有 10 000 个并发请求,那么 exec 方法将生成 10000 次 C++App。你可以想象这最终会耗尽你所有的内存。在守护程序方法中,您将只有 10 000 个套接字连接,boost::asio 可以毫无问题地处理这些连接。

但要小心,异步方法肯定需要良好的工程设计。您需要以某种方式编写它,以便没有请求阻塞另一个请求,这可能会变得非常困难。所以我也会考虑这个。

关于php - 哪种沟通方式更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108058/

相关文章:

php - 缓存zend framework 2 php代码执行结果

c++ - opencv 使用 mask 和修复将一幅图像覆盖在另一幅图像上

c++ - 将函数指针传递给 C++ 中的成员函数。出现错误

linux - bash "&"不打印 "[1]+ Done "

linux - 创建与文件同名但在不同文件夹中的 tar

php - MOODLE 从数据库读取错误

php - 尝试为每个照片库检索一张随机照片作为封面照片

linux - 如何将命令的输出两次写入文件

java - 检查 Android 中应用内订阅的状态

c++ - 一种有争议的从文件中读取行到 vector 的方法