服务器(LINUX)中运行两个进程,它们是PHPApp和C ++ App。 PHPApp由PHP编写,C ++ App由C ++编写。
现在他们需要相互通信才能执行以下任务:PHPApp向C ++ App发送请求,当C ++ App收到请求时,它从共享内存中读取数据并进行一些计算,最后返回数据到PHPApp。
上面有两种方法:
我想知道哪种方式更有效率?
更新
PHPApp是基于Apache的服务器软件的一部分,因此可能有数百个PHPApp进程向C ++ App发送请求。 PHPApp并行发出请求。
答案 0 :(得分:2)
这完全取决于你想要做什么。如果C ++ App像函数一样工作,那么输入 - > C ++应用程序 - >输出并且不经常调用然后只调用exec并生成它是有意义的。
另一方面,如果C ++ App必须每分钟并且并行地提供大量请求,那么将它构建为可以异步处理所有请求的守护进程更有意义。 (boost :: asio可以帮到你)
为什么呢?因为a)通过套接字进行通信比每次产生一个新进程要便宜b)因为假设你有10 000个并发请求,那么exec方法会产生10000次C ++ App。你可以想象这最终会吸收你所有的记忆。在守护进程中,你只需要10 000个套接字连接,boost :: asio可以毫无问题地处理。
但要小心,异步方法肯定需要良好的工程设计。您需要以某种方式编写它,以便没有请求阻止其他请求,这可能会变得非常困难。所以我也会考虑这个。