cyr*_*ldz 5 c++ multithreading asynchronous threadpool
我正在 cppreference.com 上阅读 std::async 的描述。第一个描述说:
模板函数 async 异步运行函数 f (可能在一个单独的线程中,该线程可能是线程池的一部分)并返回一个 std::future ,它最终将保存该函数调用的结果。
。[cpp参考链接]:std::async
cppreference.com所说的线程池是什么?
我阅读了标准草案 N4713 (C++ 17),但没有提到可能的线程池用法。我还知道目前标准 C++ 中还没有线程池。
cppreference 和 C++ 标准实际上在这一点上是不一致的。cppreference 是这么说的(强调和删除线是我的):
模板函数异步
async
运行该函数f
(可能可选地在单独的线程中运行,该线程可能是线程池的一部分)。
而C++ 标准是这样说的:
如果
launch::async
在 中设置policy
,则 [std::async
] 调用 [函数 f] ,就像在新的执行线程中一样...
这显然是两件不同的事情。
只有 Windows 的实现std::async
使用线程池 AFAIK,而 gcc 和 clang 为每次调用启动一个新线程std::async
(当launch::async
在 中设置时policy
),因此遵循标准。
更多分析在这里:https ://stackoverflow.com/a/50898570/5743288