当查看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)
谢谢!
它不是。请参阅前摄器设计模式:无线程并发和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 中一样,您决定在哪里运行服务(例如是否使用线程)
| 归档时间: |
|
| 查看次数: |
2647 次 |
| 最近记录: |