在我的cpp代码中,我使用阻塞sendto (标志设置为0)函数,该函数的最大值为3微秒,最小为600纳塞克。
我想要一个非阻塞的方法(即立即返回),并且花费更少的时间。
我尝试使用sendto并将标志设置为MSG_DONTWAIT,发现非阻塞sendto在延迟方面与阻塞sendto类似。
请推荐一种非阻塞和时间高效的替代方法。
发布于 2016-10-01 10:07:14
..。最高3微秒,最低600纳塞克。
这是系统将消息放入涉及系统调用的套接字缓冲区所需的时间。这不包括发送到对等程序本身,稍后在内核中完成。这也意味着使用阻塞或非阻塞sendto并不重要,因为在这两种情况下都需要将消息放入套接字缓冲区。这也意味着,select、epoll、boost::asio或其他任何东西都不会有助于加快速度,因为这不会减少将消息放入套接字缓冲区所需的时间。
阻塞和非阻塞sendto之间的唯一区别是,第一个将等待系统在套接字缓冲区中腾出空间,以防缓冲区已经满,也就是说,如果您发送消息的速度超过了系统发送消息的速度。
您的应用程序到底做了什么还不得而知,但是加速它的一种方法可能是通过使用更大的消息来减少sendto调用的数量。
发布于 2016-10-01 08:21:36
您需要使用select ()或epoll()类似的技术来确定套接字何时可以写。在Linux的情况下,请查看相应的man页面。对于平台无关的解决方案,您可以查看libevent库。
https://stackoverflow.com/questions/39804326
复制相似问题