使用boost进行TCP Zero复制

时间:2014-09-01 08:02:54

标签: c++ boost tcp boost-asio

我正在尝试使用boost实现tcp零拷贝,但我无法在google上找到任何内容。我的问题是可以使用boost库执行零拷贝,如果是这样请 给我发一些例子或一些链接。

1 个答案:

答案 0 :(得分:7)

您可以观看Yandex乐队的BoostCon演讲: The Optimization of a Boost.Asio-based Networking Server

我的直觉是他们(Yandex的家伙)过度工作(相当多......)。我要说的是,基本的解决方案就是使用预先分配的固定缓冲区(可能是每个线程),并使用Asio的MutableBufferSequence概念将它们粘合在一起。

此方法称为 Scatter-Gather ,仅在Asio文档中进行了简要介绍。这里可能有一个相关的例子:http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/examples/cpp11_examples.html#boost_asio.examples.cpp11_examples.buffers

正如@Nim已经评论过的那样,Asio默认工作在“零拷贝”模式(因为它从不拥有缓冲区,也不代表调用者分配)。所以实际上它应该非常简单。当然,内核/ libc函数是否以零拷贝方式实现仅取决于OS /平台。