使用boost进行TCP Zero复制

Rsv*_*vay 6 c++ boost tcp boost-asio

我试图使用提升实现tcp零拷贝,但我无法在谷歌上找到任何东西.我的问题是可以使用升级库执行零拷贝,如果是这样,请发给我一些示例或一些链接.

seh*_*ehe 7

您可以观看Yandex人员的BoostCon演讲:基于Boost.Asio的网络服务器的优化

我的直觉表明他们(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 /平台.