QtConcurrent
太棒了。
我会让Qt文档为自己说话:
QtConcurrent包括用于并行列表处理的函数式编程样式API,包括用于共享内存(非分布式)系统的MapReduce和FilterReduce实现,以及用于管理GUI应用程序中的异步计算的类。
例如,您为QtConcurrent::map()
提供了一个可迭代序列和一个接受序列中存储的类型项的函数,该函数将应用于集合中的所有项。这是以多线程方式完成的,线程池等于系统上逻辑CPU的数量。
QtConcurrent
中还有很多其他功能,例如filter()
,filteredReduced()
等。标准CompSci地图/缩小功能等。
我完全爱上了这个,但我正在开始研究一个不会使用Qt框架的OSS项目。它是一个库,我不想强迫别人依赖像Qt这样的大型框架。我试图将外部依赖性保持在最低限度(这是体面的事情)。
我正在寻找一个通用的C ++框架,它提供QtConcurrent
所做的相同/相似的高级基元,并且与STL集合一起使用。 AFAIK boost
没有这样的东西(虽然我可能错了)。 boost::thread
与我正在寻找的相比是非常低级的(但如果请求的lib使用boost::thread
进行低级别的工作,那就太棒了。)
我知道C#与他们的Parallel Extensions非常相似,所以我知道这不是一个只有Qt的想法。
你建议我用什么?
答案 0 :(得分:1)
虽然我没有使用它,但我听说过有关Intel's Threaded Building Blocks的好消息
截至2009年10月,它似乎没有具体的map-reduce。但是人们已经表达了兴趣并建议他们想出一些东西:
http://software.intel.com/en-us/forums/showthread.php?t=65053
“map reduce看起来像过滤器,排序和减少的简单组合,但它可能需要一些魔力才能使其高效”
答案 1 :(得分:0)
您可以使用Boost吗?我认为它不像Qt
那样提供高度抽象的层,但是应该可以在Boost的原语之上创建一个相当薄的外观(实际上,可能是现有的一些{{3已经提供了你所需要的东西 - 我不得不承认我不熟悉它们,这就是为什么我说“也许”; - )。
如果你发现现有的附加组件不合适,你的外观将是一个很好的附加组件,可以自己为Boost Vault(或其他开源代码库)做出贡献,“回馈”一个有用的可重用开源软件贡献...我希望如果需要,这会激励你做这项工作! - )