非阻塞发送函数

Non-Blocking sendto function

我在我的 cpp 代码中使用阻塞 sendto(标志设置为 0)函数,它占用最多 3 微秒和最小 600 纳秒。
我想要一个非阻塞的方法(即 returns 立即)并且花费更少的时间。
我尝试使用标志设置为 MSG_DONTWAIT 的 sendto,发现非阻塞 sendto 在延迟方面与阻塞 sendto 相似。
请提出一种非阻塞且省时的替代方法。

您需要使用 select ()epoll() 类似的技术来查明套接字何时可以写入。如果 Linux 查看相应的 man 页面。对于独立于平台的解决方案,您可以查看 libevent 库。

... takes at the max 3microsec and minimum 600nanosec.

这是系统将消息放入套接字缓冲区所需的时间,涉及系统调用。这不包括稍后在内核中完成的发送到对等点本身。这也意味着使用阻塞或非阻塞 sendto 并不重要,因为在这两种情况下都需要将消息放入套接字缓冲区。这也意味着没有 selectepollboost::asio 或任何有助于加快速度的方法,因为这些不会减少将消息放入套接字缓冲区所需的时间。

阻塞和非阻塞 sendto 之间的唯一区别是,第一个将等待系统在套接字缓冲区中腾出空间,以防缓冲区已满,即如果您发送消息的速度快于系统可以传递的速度消息。

不知道您的应用程序真正做了什么,但加快它的方法可能是通过使用更大的消息来减少 sendto 调用的数量。