TCP使用boost进行零复制
TCP Zero copy using boost
我正在尝试使用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函数是否以零拷贝方式实现完全取决于操作系统/平台。
相关文章:
- 使用strcpy将char数组的元素复制到另一个数组
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 模板,函数使用错误的构造函数来复制我的对象
- 使用提升将数据从 PyObject 复制到浮点数 *
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 使用 memcpy() 复制到 std::chrono::milliseconds 会给出错误 -Werror=clas
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 为什么使用析构函数会使类不可复制?
- 使用移动和复制语义时函数匹配如何工作?
- 如何使用位字段将数据从二进制文件复制到结构中?
- 使用共享指针实现复制 c'tor?
- 在 c++ 中对字符串使用复制函数时打印的垃圾值
- 如何使用从C++代码写入时复制 BTRFS?
- SSL_CTX_use_certificate复制使用的证书字节
- 从c++到OpenGL的数据复制使用自定义容器,但不使用std::tuple
- Qt -如何复制文件与QFile::复制使用QFileDialog
- 创建一个复制构造函数,该构造函数对输入对象进行深度复制(使用数组)
- 将结构复制(使用赋值)到联合内部的结构,导致 seg 错误