哪种沟通方式更高效

Posted

技术标签:

【中文标题】哪种沟通方式更高效【英文标题】:Which Way of Communication is More Efficient 【发布时间】:2014-04-16 11:24:50 【问题描述】:

在服务器(LINUX)中运行着两个进程,它们是 phpApp 和 C++App。 PHPApp是用PHP写的,C++App是用C++写的。

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

上面有两种方法可以做到:

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

我想知道哪种方式更有效?

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

【问题讨论】:

这取决于“C++ App”的参与频率:低:exec 高:恶魔。 加载和执行进程是一项昂贵的操作。在大多数情况下,发送消息效率更高。 【参考方案1】:

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

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

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

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

【讨论】:

+ 同意。异步方法可能是最有效的。我必须做的是 a) random pausing 每个进程摆脱不必要的废话,然后 b) 运行带有时间戳的消息跟踪,显示它们何时发送以及何时被执行。这表明由于数据库更新等原因导致不必要的阻塞,可以通过进程优先级等问题进行修复。

以上是关于哪种沟通方式更高效的主要内容,如果未能解决你的问题,请参考以下文章

高效的沟通方式-会议

向php数组添加元素的方法哪种更高效

钉钉与免费OA结合使企业沟通管理更高效便捷

使用 SqlDataAdapter 或 SqlDataReader,哪一个更高效并且对服务器的负载最小?

NLP嘴巴魔术~高效能沟通

引爆销售额 如何进行高效的客户沟通?