boost::asio co_spawn 是否创建实际线程?

Vik*_*nko 4 boost-asio c++20

当查看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);
Run Code Online (Sandbox Code Playgroud)

谢谢!

seh*_*ehe 9

它不是。请参阅前摄器设计模式:无线程并发https://www.boost.org/doc/libs/1_78_0/doc/html/boost_asio/overview/core/threads.html

是什么detached意思/做什么?文档

detached_t 类用于指示异步操作已分离。也就是说,没有完成处理程序等待操作的结果

归根结底是编写一个无操作处理程序,但(a)工作量更少(b)库有更多优化空间。


从另一个角度来看这个问题:如果执行器(io_ctx)的执行上下文从未运行/轮询,则什么也不会发生。与 boost 中一样,决定在哪里运行服务(例如是否使用线程)