我希望直接收到来自boost::lockfree:spsc_queue
电话的boost::circular_buffer
(或者boost::asio::async_read
)。看起来我需要编写一个包装器来使spsc_queue为MutableBuffer
。
如果有可能的话,是否有人可以分享一些指导,以及如何实现这一目标?
非常感谢
答案 0 :(得分:3)
使用asio
时,每个接收缓冲区必须是连续的。
由于boost::circular_buffer
不连续,因此用作字节缓冲区相当不方便。不过,您仍然可以将其作为scatter-gather I/O的2个缓冲区提交给asio
。
用于I / O的高效且方便的循环缓冲区是两次映射的内存页区域,它们之间没有任何填充。通过这种方式,您可以使用一个read
系统调用读入循环缓冲区,而无需使用分散 - 收集I / O,也无需在解析/读取其内容时处理缓冲区不连续性。