任何人都可以给出关于何时使用它们的高级直觉吗? 参考: 用 c++11 等价物替换 boost::thread 和 boost::mutex 是否明智? 什么时候最好使用 std::promise 而不是其他 std::thread 机制? 原文由 Javi 发布,翻译遵循 CC BY-SA 4.0 许可协议
这并不是一个 非此即彼的 事情——您可以将期货(连同承诺)与手动创建的 std::threads 一起使用。使用 std::async 是一种方便的方法来触发线程进行一些异步计算并通过未来将结果编组回来,但 std::async 在当前标准中相当有限。如果采纳微软 PPL 中包含一些想法的建议扩展,它将变得更加有用。 目前, std::async 可能最适合处理相当简单的程序的长时间运行的计算或长时间运行的 IO。虽然它并不能保证低开销(实际上它的指定方式使得在后台使用线程池难以实现),因此它不太适合更细粒度的工作负载。为此,您需要使用 std::thread 滚动自己的线程池,或者使用 Microsoft 的 PPL 或 Intel 的 TBB 之类的东西。 您还可以使用 std::thread 用于以更现代和可移植的方式编写的“传统”POSIX 线程样式代码。 Bartosz Milewski 讨论了方式的一些限制 std::async 目前在他的文章 Async Tasks in C++11: Not Quite There Yet 中 指定 原文由 mattnewport 发布,翻译遵循 CC BY-SA 3.0 许可协议
这并不是一个 非此即彼的 事情——您可以将期货(连同承诺)与手动创建的 std::threads 一起使用。使用
std::async
是一种方便的方法来触发线程进行一些异步计算并通过未来将结果编组回来,但std::async
在当前标准中相当有限。如果采纳微软 PPL 中包含一些想法的建议扩展,它将变得更加有用。目前,
std::async
可能最适合处理相当简单的程序的长时间运行的计算或长时间运行的 IO。虽然它并不能保证低开销(实际上它的指定方式使得在后台使用线程池难以实现),因此它不太适合更细粒度的工作负载。为此,您需要使用std::thread
滚动自己的线程池,或者使用 Microsoft 的 PPL 或 Intel 的 TBB 之类的东西。您还可以使用
std::thread
用于以更现代和可移植的方式编写的“传统”POSIX 线程样式代码。Bartosz Milewski 讨论了方式的一些限制
std::async
目前在他的文章 Async Tasks in C++11: Not Quite There Yet 中 指定