【问题标题】:A generic C++ library that provides QtConcurrent functionality?提供 QtConcurrent 功能的通用 C++ 库?
【发布时间】:2010-06-12 16:49:31
【问题描述】:

QtConcurrent 太棒了。

我会让 Qt 文档自己说话:

QtConcurrent 包括用于并行列表处理的函数式编程风格 API,包括用于共享内存(非分布式)系统的 MapReduce 和 FilterReduce 实现,以及用于管理 GUI 应用程序中的异步计算的类。

例如,您给QtConcurrent::map() 一个可迭代序列和一个函数,该函数接受存储在序列中的类型的项目,并且该函数应用于集合中的所有项目。这是以多线程方式完成的,线程池等于系统上逻辑 CPU 的数量。

QtConcurrent 中还有很多其他功能,如filter()filteredReduced() 等。标准的 CompSci 映射/归约函数等。

我完全爱上了这个,但我正在着手开发一个不会使用 Qt 框架的 OSS 项目。它是一个库,我不想强​​迫别人依赖像 Qt 这样的大框架。我正在尝试将外部依赖项保持在最低限度(这是体面的事情)。

我正在寻找一个通用 C++ 框架,它提供与 QtConcurrent 相同/相似的高级原语,并且适用于 STL 集合。 AFAIK boost 没有这样的东西(不过我可能错了)。 boost::thread 与我正在寻找的相比非常低级(但如果请求的库使用 boost::thread 进行低级工作,那就太好了)。

我知道 C# 与他们的 Parallel Extensions 有一些非常相似的东西,所以我知道这不仅仅是 Qt 的想法。

你建议我用什么?

【问题讨论】:

  • QtConcurrent 很酷。我调整了 Mandelbrot 示例以使用并行接口...您可能会感兴趣:hostilefork.com/thinker-qt
  • @Hostile 是的,QtConcurrent 很酷。正如我所说,我一直在使用它。我只是在寻找类似的东西,它适用于 STL 集合而不是 Qt 本身。
  • 我可能错了,但我认为 Qt 的模块化意味着您最多只能使用 QtCore 和 QtConcurrent(而不是“像 Qt 这么大的框架”)?
  • @mosfet 是的,但我也想避免链接到 QtCore。

标签: c++ multithreading qt boost


【解决方案1】:

我听说过关于Intel's Threaded Building Blocks 的好消息,虽然我没用过

截至 2009 年 10 月,它似乎没有专门的 map-reduce。但人们表达了兴趣并建议他们想出一些办法:

http://software.intel.com/en-us/forums/showthread.php?t=65053

“map reduce 看起来像是过滤器、排序和归约的简单组合,但它可能需要一些魔法才能使其高效”

【讨论】:

  • 我看过TBB,很不错。它没有 map/reduce,但它确实有很多我不需要的东西:)。恕我直言,这似乎有点矫枉过正。 QtConcurrent 总共提供 7 个函数(+ 重载和阻塞变体),而 TBB 有范围、集合、算法、任务调度、定时、线程本地存储,可能还有厨房水槽。
【解决方案2】:

你能用Boost吗?我不认为它提供了像Qt 那样高抽象的层,但是应该可以在 Boost 的原语之上制作一个相当薄的外观(实际上,也许一些现有的 add-ons 已经提供你需要什么——我不得不承认我对它们并不熟悉,这就是我说“也许”的原因;-)。

如果您发现现有的附加组件不合适,您的外观将是一个出色的附加组件,可以自己为 Boost Vault(或其他开源存储库)做出贡献,“回馈”一个有用的可重用开源贡献...我希望这能激励您在需要时完成这项工作!-)

【讨论】:

  • 是的,我正在使用 boost。如果没有库可以满足我的要求,我准备推出自己的库。但我宁愿不要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2011-11-24
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多