如何在发送大量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结构复制到内核空间,而是依赖于预先锁定的缓冲区,固定大小的完成队列,关于完成的可选事件通知以及一次性从内核空间向用户空间返回多个完成的能力.“

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

点赞