使用 Xcode 为 macOS 构建时,C++ async 是否使用线程池?
Does C++ async use a thread pool when building for macOS with Xcode?
使用平台的标准开发工具和编译器[1],std::async
是否为每个后台作业生成一个新的 OS 线程,或者它是否使用线程池或某些基于工作窃取任务队列?
- 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
。尽管实现可以做到这一点,但在实践中实现起来会非常困难,我预计在不久的将来也不会出现。
使用平台的标准开发工具和编译器[1],std::async
是否为每个后台作业生成一个新的 OS 线程,或者它是否使用线程池或某些基于工作窃取任务队列?
- 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
。尽管实现可以做到这一点,但在实践中实现起来会非常困难,我预计在不久的将来也不会出现。