首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >boost::asio co_spawn是否创建一个实际的线程?

boost::asio co_spawn是否创建一个实际的线程?
EN

Stack Overflow用户
提问于 2022-02-01 11:32:27
回答 1查看 817关注 0票数 3

在查看boost asio co_spawn文档(产卵/重载6.html)时,我看到了这样一条语句:“生成一个新的基于协同的执行线程”,但是我的理解是,co_spawn并不创建实际的线程,而是使用作为boost::asio::io_context池一部分的线程。从某种意义上说,这是一个“基于协同线的执行线程”,从某种意义上说,这个协同线将是从内部产生的所有协同线的根。

在这里,我的理解是正确的吗?或者每当使用co_spawn时都会创建一个实际的线程,如下所示:

代码语言:javascript
运行
复制
::boost::asio::co_spawn(io_ctx, [&] -> ::boost::asio::awaitable<void> {
 // do something
}, ::boost::asio::detached);

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-01 11:52:46

事实并非如此。见前置器设计模式:无线程并发性asio/概述/core/线程s.html

detached是什么意思?文档说:

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

这可以归结为编写一个非op处理程序,但是(a)减少工作(b)为库优化提供更多的空间。

从另一个角度来看,如果执行器(io_ctx)的执行上下文从未运行/轮询,则不会发生任何事情。和往常一样,决定您在哪里运行服务(例如,您是否使用线程)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70939861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档