微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在发送大量UDP数据包时减少系统调用开销? (Windows和Linux)

例如,我在Windows上发送100000个UDP数据包.对于每个数据包,我需要调用一次WSASendTo(),因此可能会引入大量的系统调用开销.有没有办法进行批量发送并减少这种开销?谷歌搜索一段时间后,我找不到适合Windows的解决方案.此外,我想知道这是否可以在Linux上.谢谢.

解决方法:

在Windows上,您可以在Server 2012和Windows 8及更高版本上使用新的Windows注册I / O API(RIO).

我已经写了很多关于它的内容here并且已经与Windows上可用的以前的API进行了几次性能比较.性能测试可以在here找到.

总结:“已注册的I / O网络扩展,RIO,是一种新的API,已添加到Winsock以支持高速网络,以提高网络性能,降低延迟和抖动.这些扩展主要针对服务器应用和使用预先注册的数据缓冲区和完成队列以提高性能.性能的提高来自于在发出单个请求时无需锁定内存页并将OVERLAPPED结构复制到内核空间,而是依赖于预先锁定的缓冲区,固定大小的完成队列,关于完成的可选事件通知以及一次性从内核空间向用户空间返回多个完成的能力.“

我的性能测试结果似乎暗示它有效.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐