c++ - 如何优化我的分布式应用程序对网络消息的排队和缓冲以提高性能?

标签 c++ network-programming

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

3年前关闭。




Improve this question




在大多数情况下,应用程序需要使用几台机器才能在所需的规模上执行。主应用程序(主应用程序)连接到其他机器并执行工作进程。这些机器应该连接到网络,但物理连接可能是通过纯以太网,并且可能是独立的并通过互联网。
在执行期间,主进程和每个工作进程之间会发送许多消息。问题是我们代码的许多不同部分都被允许发送消息,而定制的用户代码也可以。无法预测消息的时间大小和频率。用户应该连接一个足够强大的网络来满足他的需求,但我们正在尝试尽可能优化性能。

应用程序的所有部分都将使用相同的通信模块 API 来发送消息。

我的问题:
频繁发送太多单独的小消息是否存在网络/互联网性能问题?
在这种情况下,我的通信模块是否需要将一堆消息一起收集并以单个更大的消息发送?
它是否需要将大量消息分解为较小的消息?
可能导致性能问题(我的意思是网络/互联网性能)的确切频率和大小是多少?
或者操作系统/硬件会自动为我完成这一切吗?
如果模块必须这样做,是否有任何 c++ 库可以帮助我? (最好是允许商业使用的开源)
像这样收集消息当然会导致大多数消息在进程询问时不会立即发送,而是稍后发送。我可以要求我的应用程序中发送消息的任何代码来指定消息可以延迟多少(不破坏他的要求)。大多数消息不介意延迟几秒钟。

显然我在网络实现方面没有太多背景,但我知道我应该澄清一下,对于我希望使用的 API,我需要每条消息都能成功。如果失败,我只需停止应用程序并通知用户。没有恢复的可能。

最佳答案

这取决于。一般来说,当发送许多较小的消息而不是较大的消息时,网络层的开销更大。由于窗口化,延迟还会加剧较小数据报的开销;这在 WAN 环境中更是一个问题。

您应该在您的特定环境中进行一些小规模的测试,因为有很多变量,我们需要网络环境的更多细节,即使只是给出估计。

关于c++ - 如何优化我的分布式应用程序对网络消息的排队和缓冲以提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248418/

相关文章:

c++ - 我是否在 Visual Studio 中正确设置了 boost 包含和链接器路径? (提供的步骤)

android - 为 Android 编译 VLC 时出现问题 - libvlcjni.so

c - 某些调用后套接字不工作

Java套接字无法正确显示收到的输入

c++ - G++ 允许在 x64 上进行隐式 long-to-int 截断

c++ - QGraphicsScene 缺少特定项目更新

c++ - push_back()不适用于自定义数据类型(模板类)

java - 如何使用线程访问相同的数据?

c++ - Linux网络编程。我可以从什么开始?

c# - 使用GPRS的WM6 socket