使用 Xcode 为 macOS 构建时,C++ async 是否使用线程池?

Does C++ async use a thread pool when building for macOS with Xcode?

使用平台的标准开发工具和编译器[1],std::async 是否为每个后台作业生成一个新的 OS 线程,或者它是否使用线程池或某些基于工作窃取任务队列?

  1. Xcode、Clang/LLVM

使用平台标准工具链构建的应用程序 (Xcode/Clang) 不使用线程池。使用 std::async 启动的任务的堆栈底部包含 std::thread 和 pthread 调用。

退出时,每个作业调用 pthread_exit() 杀死线程 运行。

Xcode 8.3.3 在为 iOS 构建时,每个使用 std::async 启动的作业也使用一个 OS 线程(在原始 iPad Pro 9.7 上测试“目标)。

目前没有主要的标准实现使用线程池 std::async。尽管实现可以做到这一点,但在实践中实现起来会非常困难,我预计在不久的将来也不会出现。