boost :: lockfree :: spsc_queue和boost :: asio

时间:2017-05-23 16:32:49

标签: c++ boost boost-asio boost-circularbuffer

我希望直接收到来自boost::lockfree:spsc_queue电话的boost::circular_buffer(或者boost::asio::async_read)。看起来我需要编写一个包装器来使spsc_queue为MutableBuffer

如果有可能的话,是否有人可以分享一些指导,以及如何实现这一目标?

非常感谢

1 个答案:

答案 0 :(得分:3)

使用asio时,每个接收缓冲区必须是连续的。

由于boost::circular_buffer不连续,因此用作字节缓冲区相当不方便。不过,您仍然可以将其作为scatter-gather I/O的2个缓冲区提交给asio

用于I / O的高效且方便的循环缓冲区是两次映射的内存页区域,它们之间没有任何填充。通过这种方式,您可以使用一个read系统调用读入循环缓冲区,而无需使用分散 - 收集I / O,也无需在解析/读取其内容时处理缓冲区不连续性。