【发布时间】:2012-01-14 02:09:59
【问题描述】:
我正在从 UDP 端口读取单个数据项。此读取必须是尽可能低的延迟。目前我正在通过 boost::asio 库的 async_receive_from 方法阅读。有谁知道我在到达网卡的数据包和在我的用户代码中调用的回调方法之间会遇到什么样的延迟?
Boost 是一个很好的库,但是很通用,有没有更低延迟的替代方案?
非常欢迎所有关于编写低延迟 UDP 网络程序的意见。
编辑:另一个问题,是否有一种相对可行的方法来估计我在 NIC 和用户模式之间遇到的延迟?
【问题讨论】:
-
@javapowered 是否有任何内容未包含在相应的手册页中? linux.die.net/man/7/epoll 和 linux.die.net/man/2/recvmsg?
-
@sehe 我想我现在应该改变我的问题 :) 我决定使用普通阻塞
recvmsg因为它在“单线程单套接字”配置中很容易并且可能还不错。接受的答案建议使用epoll(适用于许多套接字,但我们应该将它用于单个套接字吗?)。与“recvmsg one-thread one-socket”相比,它实际上会更好吗?recvmsg屏蔽有那么糟糕吗? -
@javapowered 一切都与选择有关。它阻塞的事实 - 在实际资源上可能会给它最低的延迟。但是公认的答案确实包含大量有关如何从您的操作系统中挤出最后一滴响应的相关信息
标签: c++ boost boost-asio latency