【发布时间】:2012-09-25 05:52:45
【问题描述】:
更新原始帖子:一位同事指出我做错了什么。 我将在帖子底部给出解释,因为它可能会有所帮助 为他人。
我正在尝试对网络性能的限制有一个基本的了解 python 程序并遇到异常。代码片段
while 1:
sock.sendto("a",target)
将 UDP 数据包发送到目标机器,与主机发送的速度一样快。 我测量的发送速率为每秒超过 4000 个数据包,即 250 us 每个数据包。这似乎很慢,即使对于像 python 这样的解释语言也是如此 (该程序在 2 GHz AMD opteron、Linux、python 版本 2.6.6 上运行)。 我在 python 中看到了更好的 TCP 性能,所以我觉得这有点奇怪。
如果我在后台运行它并运行顶部,我发现 python 正在使用 只有25%的cpu,提示python可能是人为延迟 UDP数据包的传输。
有没有其他人经历过类似的事情?有谁知道python 确实限制了数据包传输的速率,如果有办法转 这个关了?
顺便说一句,类似的 C++ 程序每秒可以发送超过 200,000 个数据包, 所以这不是平台或操作系统的内在限制。
所以,事实证明我犯了一个愚蠢的新手错误。我忽略了调用 gethostbyname 明确地。因此,sendto 命令中的目标地址包含 一个象征性的名字。每次发送数据包时都会触发名称解析 发送。修复此问题后,我测量的最大发送速率约为 120,000 p/s。 好多了。
【问题讨论】:
-
仍然令人惊讶,我原以为名称解析会被缓存。您应该继续提供您的解决方案作为答案。