哪种沟通方式更有效率

时间:2014-04-16 11:24:51

标签: 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(...)与PHP进行通信(php具有此类功能)。在有来自PHPApp的请求之前没有C ++应用程序进程,并且这样每个请求都需要一个C ++ App实例。
  3. 我想知道哪种方式更有效率?

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

1 个答案:

答案 0 :(得分:2)

这完全取决于你想要做什么。如果C ++ App像函数一样工作,那么输入 - > C ++应用程序 - >输出并且不经常调用然后只调用exec并生成它是有意义的。

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

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

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