C++ Boost ASIO能否用于构建低延迟应用程序?
Boost ASIO能否用于构建低延迟应用程序,如HFT(高频交易)C++ Boost ASIO能否用于构建低延迟应用程序?,c++,boost,server,boost-asio,low-latency,C++,Boost,Server,Boost Asio,Low Latency,Boost ASIO能否用于构建低延迟应用程序,如HFT(高频交易) 因此Boost.ASIO使用特定于平台的最佳解复用机制:IOCP、epoll、kqueue、poll\u set、/dev/poll 还可以与TOE(TCP/IP卸载引擎)和OpenOnload(内核旁路BSD套接字)一起使用以太网适配器 但是,使用Boost.ASIO+TOE+OpenOnload可以构建低延迟应用程序吗?几年前,我评估了Boost-ASIO在高频交易中的使用情况。据我所知,今天的基本情况还是一样的。以下
- 因此Boost.ASIO使用特定于平台的最佳解复用机制:IOCP、epoll、kqueue、poll\u set、/dev/poll
- 还可以与TOE(TCP/IP卸载引擎)和OpenOnload(内核旁路BSD套接字)一起使用以太网适配器
但是,使用Boost.ASIO+TOE+OpenOnload可以构建低延迟应用程序吗?几年前,我评估了Boost-ASIO在高频交易中的使用情况。据我所知,今天的基本情况还是一样的。以下是我决定不使用它的一些原因:
bind()
样式的回调。这里有一些开销libev
、libevent
和libuv
)则更具战斗力,可以避免这些缺点相关:这是Asio作者的建议,发布到公共SG-14谷歌集团(不幸的是,该集团出现了问题,他们已经转移到另一个邮件列表系统): 我从事超低延迟金融市场系统的工作。像许多人一样 在业内,我无法透露项目细节。然而,我 将尝试回答您的问题 一般而言:
- 以最低的延迟,您将找到基于硬件的解决方案
- 然后:特定于供应商的内核绕过API。例如,对帧进行编码和解码,或使用(部分)TCP/IP堆栈 不遵循BSD套接字API模型的实现
- 然后:供应商提供的drop-in(即LD_PRELOAD)内核旁路库,它以一种 对应用程序透明
- 批处理数据报系统调用(即sendmmsg、recvmmsg)
- 某些插座选项
我能看见。5.和(有点)4。大约2点。当涉及到正确处理与自定义处理程序类型相结合的股时,我同意。这就是你所说的“以正确的方式”吗?我真的不知道如何需要(1.)bind风格的回调,更不用说异步完成可以避免最小的开销了。(3.)您指的是库代码还是呼叫代码?也许你有一个引人注目的例子?@sehe:我没有使用Boost.Asio的示例代码-当我们意识到它行不通时,我们放弃了用它构建的原型。那时,
libuv
是不可行的,但是libev
和libevent
是——我们仍然选择走自己的路。我所说的“以正确的方式”是指需要(a)在特定时间使用特定的sockopts/ioctl,(b)完全控制多个连接的优先级(包括故意饥饿),以及(c)使用特定的、不可移植的API,如accept4()
(Asio即使在今天也没有使用,因此不能使用原子SOCK\u CLOEXEC
)。啊。你说的“以正确的方式”是指与外部需求相关的(我假设你指的是“针对Asio”).Atomic SOCK_CLOEXEC是我遇到并不得不解决的问题之一。我不希望有任何示例代码,只是这些示例澄清了您对抽象项目符号文本的想法:)饥饿确实是一个问题。我