从net.UDPConn读取锁定PC

时间:2015-12-15 16:46:00

标签: go

作为测试,我编写了一个小工具来测试两台PC之间的LAN连接。 它是一个客户端/服务器模型,它只发送尽可能多的UDP数据包,另一方面我会读取所有内容 为了最大化我的资源,我为我的机器的每个核心启动了一个goroutine 发送,接收和测量速度有效,但当我达到高吞吐量(500+ Mb / s)时,接收端变得完全没有响应。
如果我限制连接,我没有任何问题 此外,我的CPU最多只有一个核心(虽然我使用runtime.GOMAXPROCS(0)并开始接收runtime.NumCPU goroutines)

Maxed out CPU/Core

我在这里将代码上传到GitHub:https://github.com/femot/lanbench

如果我将客户端更改为在本地运行,则不会发生此问题。它只会发生,如果我从另一台PC启动客户端(虽然测量的速度也达到650 Mb / s)

1 个答案:

答案 0 :(得分:1)

您的服务器首先受到delta通道的限制,缓冲区为100.我确定在任何重要的数据包速率下您都会压倒该循环。

这不是一个非常好的基准,因为您的数据包速率将比带宽更受限制。您特别只是尝试测试Go可以多快发送和接收1024字节UDP数据报。

无论你启动多少个goroutine,IO都在一个线程中通过网络轮询器。如果您无法使用单个核心使您的链接饱和,那么您将需要多个流程,或者您需要使用其他语言执行此操作。