TCP使用boost进行零复制

TCP Zero copy using boost

本文关键字:复制 使用 boost TCP      更新时间:2023-10-16

我正在尝试使用boost实现tcp零复制,但我在谷歌上找不到任何东西。我的问题是是否可以使用boost库执行零复制,如果可以,请给我发一些例子或链接。

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

我的直觉是,他们(Yandex的人)对此进行了过度设计(相当多…)。我认为基本的解决方案在于只使用预先分配的固定缓冲区(可能是每个线程),并使用Asio的MutableBufferSequence概念将它们粘在一起。

这种方法被称为分散聚集,在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函数是否以零拷贝方式实现完全取决于操作系统/平台。