何时使用 std::async 与 std::threads?

新手上路,请多包涵
阅读 724
1 个回答

这并不是一个 非此即彼的 事情——您可以将期货(连同承诺)与手动创建的 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题