当我使用以下代码时,它会生成一个新线程。
resolver_.async_resolve(
host_, port_,
beast::bind_front_handler(&session::on_resolve, shared_from_this()));
但是当我用非异步版本更改它时,它不会创建新线程。
boost::system::error_code err;
auto const& results = resolver_.resolve(host_, port_, err);
on_resolve(err, results);
旋转变压器定义:
boost::asio::ip::tcp::resolver resolver_;
这种行为没有在任何地方记录,我花了一个小时试图了解这个线程是在哪里产生的,因为它基本上是空线程并且不会在任何时候被破坏。这是线程详细信息的屏幕截图。
Boost版本:boost/1.82.0 该线程的目的是什么?它与 boost tcp 异步解析有何关系?
线程的创建完全由执行上下文中相应的服务实现控制。这是一个实现细节,您不必担心。
它记录在“平台特定实施说明”下:
每个 io_context 都有一个额外的线程用于模拟异步主机解析。该线程是在第一次调用 ip::tcp::resolver::async_resolve() 或 ip::udp::resolver::async_resolve() 时创建的。