首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UDP数据包发送到同一地址的效率

将UDP数据包发送到同一地址的效率
EN

Stack Overflow用户
提问于 2016-12-10 10:16:45
回答 1查看 236关注 0票数 0

我正在修改现有应用程序中的一些基础设施,该应用程序将UDP数据包发送到1...N个地址(通常是多播)。当前有T个发送器对象,在某些情况下,所有的发送器都发送到相同的地址。

因此,为了简化并提供一个示例,假设有3个发送器对象,它们都需要发送到单个特定地址。我的问题是。哪个更有效率?:

选项1)在单个套接字周围放置一个互斥锁,并使所有发射器(T)共享同一套接字。

代码语言:javascript
复制
T----\
T----->Socket
T----/

选项2)使用三个单独的套接字,所有套接字都发送到同一位置。

代码语言:javascript
复制
T----->Socket 1
T----->Socket 2
T----->Socket 3

我怀疑对于第二种选择,在幕后,操作系统或NIC在最终传输周围放置一个互斥,因此从大的角度来看,选项2可能与选项1没有太大不同。

下周我可能会在我的开发PC上设置一个实验,但我无法测试用户可能安装在其上的所有潜在的计算机配置。我也意识到有不同的实现- Windows和Linux,不同的NIC芯片组制造商,等等,但我想知道是否有人可能有一些过去的经验或架构知识,可以阐明其中一个选项的优势。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-12-15 02:19:55

在Windows10计算机上运行了一些基准测试后,我有了一个“答案”,至少让我大致了解了应该期待什么。我不能百分之百确定每个系统都会以相同的方式运行,但我运行的大多数服务器都使用Intel NIC和Windows 10,并且我的典型数据包大小约为1200字节,因此答案至少让我感到放心,它对于我的特定场景是正确的。我决定将结果发布在这里,以防它可以帮助其他任何人使用这个实验。

我构建了一个简单的命令行应用程序,它首先生成T个发射器线程,所有线程都使用一个周围有互斥锁的套接字。之后,它将立即使用相同数量的发射器运行另一个测试,但这一次每个发射器都有自己的套接字,因此不需要互斥锁(尽管我确信在较低的级别上有锁定机制)。每个发射器以尽可能快的速度发送数据包。

这是我使用的测试设置:

  • 2,700,000个数据包,每个1200字节。
  • 发布模式,64位。
  • i7-3930K CPU,英特尔千兆位CT PCIE适配器。

下面是结果

  • 1发射器: SharedSocket = 28.2650秒:1套接字= 28.2073秒。
  • 3发射器: SharedSocket = 28.4485秒: MultipleSockets = 27.5190秒。
  • 6发射器: SharedSocket = 28.7414秒: MultipleSockets = 27.3485秒。
  • 12发射器: SharedSocket = 27.9463秒: MulitpleSockets = 27.3479秒。

正如预期的那样,只有一个线程的测试对两个线程的时间几乎相同。但是,在使用3个、6个和12个发射器的情况下,通过使用每个线程一个套接字而不是共享套接字,性能提高了大约3%。这不是一个巨大的差异,但如果你试图从你的系统中挤出最后一盎司,它可能是一个有用的统计数据。我的特殊应用程序是用于传输大量视频的。

就像是一次理智的检查...这是TaskManager在服务器端的网络页面的屏幕截图。您可以在测试中途看到吞吐量增加,这与切换到第二个多套接字测试时一致。我还包括了一段客户端计算机的录屏(这是一台Windows7机器)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41071500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档