关于boost.asio复合操作有几点不清楚,这些操作在官方文档和我已阅读的主题中的各种线程中都不清楚。boost.asio在单线程和多线程进程中的复合操作
场景
两个boost::asio::async_write
请求A和B被安排在一个TCP套接字。
问题
- 在单线程处理中,可能发生的是A被同时地B所执行?也就是说,A的
async_write_some
的中间调用与B的调用(基本上呈现损坏的流)混合? - 如果(1)的答案为是,那么
io_service::strand
是否解决了单线程过程中的问题?它是否确保在B之前完成A的所有中间呼叫开始? - 请问
io_service.strand
是否解决了(1)在多线程进程中,当多个线程执行io_service::run()
?它是否确保在B之前完成A的所有中间呼叫开始?
文档非常清晰,真的。它可能看起来不清楚,但这是因为你脑海中存在一些“不清楚的主题”,例如proactor模式!无论如何,topnotch SO问题/答案,帮助我在我自己的学习曲线之一是[那个](http://stackoverflow.com/questions/15568100/confused-when-boostasioio-service-run-method-blocks-unblocks ?RQ = 1)。 –
This [answer](http://stackoverflow.com/a/7756894/1053968)通过使用一个队列来序列化多个'async_write()'操作,并用一个异步调用链处理队列一个['strand'](http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/io_service__strand.html),满足'async_write()'的要求和流的线程安全。 –