为什么 boost asio tcp 解析器为异步解析创建线程

问题描述 投票:0回答:1

当我使用以下代码时,它会生成一个新线程。

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_;

这种行为没有在任何地方记录,我花了一个小时试图了解这个线程是在哪里产生的,因为它基本上是空线程并且不会在任何时候被破坏。这是线程详细信息的屏幕截图。

enter image description here

Boost版本:boost/1.82.0 该线程的目的是什么?它与 boost tcp 异步解析有何关系?

c++ multithreading boost boost-asio asio
1个回答
0
投票

线程的创建完全由执行上下文中相应的服务实现控制。这是一个实现细节,您不必担心。

它记录在“平台特定实施说明”下

每个 io_context 都有一个额外的线程用于模拟异步主机解析。该线程是在第一次调用 ip::tcp::resolver::async_resolve() 或 ip::udp::resolver::async_resolve() 时创建的。

© www.soinside.com 2019 - 2024. All rights reserved.