Я хотел бы получить прямо в boost::lockfree:spsc_queue
(или, альтернативно, boost::circular_buffer
) из boost::asio::async_read
вызов. Похоже, мне нужно написать оболочку, чтобы сделать spsc_queue MutableBuffer
,
Кто-нибудь может поделиться некоторыми рекомендациями о том, возможно ли это и как этого добиться?
Большое спасибо
Каждый приемный буфер должен быть смежным при использовании asio
,
поскольку boost::circular_buffer
не является смежным, довольно неудобно использовать в качестве байтового буфера. Тем не менее, вы можете представить его asio
как 2 буфера с сборка ввода-вывода.
Эффективный и удобный циклический буфер для ввода / вывода — это область страниц памяти, отображаемых дважды без какого-либо дополнения между ними. Таким образом, вы можете читать в свой круговой буфер с одним read
syscall, без необходимости использовать сборку ввода-вывода с разбросом и без необходимости разбирать буфер при разборе / чтении его содержимого.
Других решений пока нет …