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

例如,我在Windows上发送100000个UDP数据包。 对于每个数据包,我需要调用一次WSASendTo() ,所以可能会引入大量的系统调用开销。 有没有办法做批量发送和减less这种开销? 谷歌search了一段时间后,我找不到Windows的解决scheme。 另外,我想知道这是否可能在Linux上。 谢谢。

Solutions Collecting From Web of "发送大量UDP数据包时如何减less系统调用开销? (Windows和Linux)"

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

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

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

我的表现测试的结果似乎意味着它的工作。

在Windows中使用TransmitPackets()