io_service::run()的阻塞行为源于它对工作和处理程序的处理。 它一直处于阻塞状态,直到:
当 io_service::run() 阻塞直到“没有更多处理程序要分派”时,它表示没有注册回调形式的未完成任务。
在第一个示例 (3a) 中,io_service 阻塞在 run() 内,直到所有三个已发布的斐波那契计算处理程序都已执行。
客户端代码似乎使用异步 I/O (async_receive),但它有效地同步运行:
等效的同步操作将是:
boost::asio::error_code error; std::size_t bytes = socket.receive(buffer, error); // Execute handler with error and bytes
混合同步和异步操作会带来复杂性。考虑避免这种做法。 Boost.Asio 文档提供了有关异步编程优势的宝贵见解。
以上是`boost::asio::io_service::run()` 何时阻塞?的详细内容。更多信息请关注PHP中文网其他相关文章!