Linux 与 Win 运行时计时

标签 linux udp

我有一个从 Windows 移植到 Linux 的应用程序。现在相同的代码在 VS C++ 和 g++ 上编译,但是在 Win 上运行和在 Linux 上运行时在性能上存在差异。此应用程序的范围是缓存。它是服务器和客户端之间的一个节点,它在一个列表中缓存客户端请求和服务器响应,这样任何其他客户端发出的请求已经被服务器处理过,这个节点将响应而不是将其转发到服务器。

当此节点在 Windows 上运行时,客户端会在大约 7 秒内获得所需的一切。但是当同一节点在 Linux (Ubuntu 9.04) 上运行时,客户端会在 35 秒内启动。每个测试都是从头开始的。我试图理解为什么会出现这种时间差异。一个奇怪的场景是当节点在 Linux 上运行但在由 Win 托管的虚拟机中时。在这种情况下,加载时间约为 7 秒,就像在 native 运行 Win 一样。所以,我的印象是网络存在问题。

该节点使用 UDP 协议(protocol)发送和接收网络数据,并使用 boost::asio 作为实现。我尝试更改所有受支持的套接字标志,更改缓冲区大小,但没有任何效果。

有人知道为什么会发生这种情况,或者任何与 UDP 相关的网络设置可能会影响性能吗?

谢谢。

最佳答案

如果您怀疑存在网络问题,请进行网络捕获(Wireshark 非常适合此类问题)并查看流量。

根据网络捕获或分析器的输出找出时间花在了哪里。 一旦您知道您已经完成了解决方案的一半。

关于Linux 与 Win 运行时计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565918/

相关文章:

c - 以破折号为前缀的命令行参数有什么特别之处吗?

c - 通过 C 代码使用 ssh

linux - 如何在 mac(不是 UI)上查看代理配置以使用企业 git

c++ - UDP 以无符号字符形式接收数据

Python - 单击按钮后创建目录

c - 用户定义信号 sigusr1 和 sigusr2

java - 突破UDP套接字接收方法

c++ - 用于实时视频流的流协议(protocol)和套接字类型

C# .NET 4.0/4.5 UDP 发送问题

c++ - 重新打开连接的数据报套接字