提振.Asio复合操作在单线程和多线程进程

boost.asio compound operations in single and multi threaded processes

本文关键字:多线程 进程 单线程 Asio 复合 操作 提振      更新时间:2023-10-16

关于boost有几件事。从官方文档和我读过的关于这个主题的各种线程中不清楚的asio复合操作。

两个boost::asio::async_write请求A和B被调度到一个TCP套接字上。

  1. 在单线程进程中,a和B可以并发执行吗?也就是说,对A的async_write_some的中间调用与B的调用混合在一起(这基本上呈现了一个损坏的流)?
  2. 如果(1)的答案是肯定的,io_service::strand是否解决了单线程进程的问题?它能保证A的所有中间调用在B开始之前完成吗?
  3. 当多个线程执行io_service::run()时,io_service.strand是否解决了多线程进程中(1)的问题?它能保证A的所有中间调用在B开始之前完成吗?

文档明确声明:"程序必须确保在此操作完成之前,流不执行其他写操作(如async_write,流的async_write_some函数,或任何其他执行写的组合操作)。"

因此,不能并发调用多个async_write。在单线程的情况下,可以将它们链接起来,在前一个完成处理程序中调用后续的async_write

如果io_service::run在多个线程中运行,只需将async_write的完成处理程序封装在strand中,Asio将同步所有中间内部处理程序。