gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:53:53 37 4
gpt4 key购买 nike

在查看 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 Threadshttps://www.boost.org/doc/libs/1_78_0/doc/html/boost_asio/overview/core/threads.html

detached 是什么意思/做什么? 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.

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


从另一个角度来看:如果执行器的执行上下文 (io_ctx) 从未运行/轮询,则什么都不会发生。与往常一样,决定在何处运行服务(例如是否使用线程)

关于boost-asio - boost::asio co_spawn 会创建一个实际的线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70939861/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com