在查看boost asio co_spawn
文档(产卵/重载6.html)时,我看到了这样一条语句:“生成一个新的基于协同的执行线程”,但是我的理解是,co_spawn
并不创建实际的线程,而是使用作为boost::asio::io_context
池一部分的线程。从某种意义上说,这是一个“基于协同线的执行线程”,从某种意义上说,这个协同线将是从内部产生的所有协同线的根。
在这里,我的理解是正确的吗?或者每当使用co_spawn
时都会创建一个实际的线程,如下所示:
::boost::asio::co_spawn(io_ctx, [&] -> ::boost::asio::awaitable<void> {
// do something
}, ::boost::asio::detached);
谢谢!
发布于 2022-02-01 11:52:46
事实并非如此。见前置器设计模式:无线程并发性和asio/概述/core/线程s.html
detached
是什么意思?文档说:
detached_t类用于指示分离异步操作。也就是说,没有等待操作结果的完成处理程序。
这可以归结为编写一个非op处理程序,但是(a)减少工作(b)为库优化提供更多的空间。
从另一个角度来看,如果执行器(io_ctx
)的执行上下文从未运行/轮询,则不会发生任何事情。和往常一样,您决定您在哪里运行服务(例如,您是否使用线程)
https://stackoverflow.com/questions/70939861
复制相似问题