boost::asio co_spawn 会创建一个实际的线程吗?

does boost::asio co_spawn create an actual thread?

在查看 boost asio co_spawn 文档 (https://www.boost.org/doc/libs/1_78_0/doc/html/boost_asio/reference/co_spawn/overload6.html) 时,我看到了这个语句,“生成一个新的基于协程的执行线程”,但我的理解是 co_spawn 确实不创建实际线程,而是使用属于 boost::asio::io_context 池的线程。从某种意义上说,这是一个“基于协程的执行线程”,这个协程将是从这个协程中产生的所有协程的根

我的理解是否正确,或者每当像这样使用 co_spawn 时都会创建一个实际的线程:

::boost::asio::co_spawn(io_ctx, [&] -> ::boost::asio::awaitable<void> {
 // do something
}, ::boost::asio::detached);

谢谢!

没有。参见 The Proactor Design Pattern: Concurrency Without Threads and https://www.boost.org/doc/libs/1_78_0/doc/html/boost_asio/overview/core/threads.html

detachedmean/do是什么意思? documentation 表示:

The detached_t class is used to indicate that an asynchronous operation is detached. That is, there is no completion handler waiting for the operation's result.

它归结为编写一个 no-op 处理程序,但 (a) 工作量减少 (b) 为库优化提供了更多空间。


另一个看待这个问题的角度是:如果执行程序 (io_ctx) 的执行上下文永远不会 run/polled,那么什么都不会发生。与往常一样,决定你运行服务的位置(例如你是否使用线程)