我正在使用MSVC2010启动一个新的MFC项目,现在正在尝试决定使用哪个库来执行并发任务。我知道新的C++0x线程特性,但它不是在VC10中实现的。VC12还不是一个选择,但它会在未来出现。我确实有微软的PPL,这对我来说很好,但我们可能会因为新项目的到来而从Windows转移到Linux,所以为了重用代码,也许留在STL上更容易移植?为此,我可以选择使用boost,以便通过VC12更改为std。
我的问题是,我应该更喜欢什么,PPL还是临时增强然后std?我想听听你对两者的经验,哪一个更强大,更方便,优点和缺点。
发布于 2013-05-23 02:00:40
PPL和C++11并行库实际上并不是直接的替代品。PPL提供了一种更高级别的、基于任务的并发方法,与直接使用std::thread或类似的线程库管理线程相比,它更容易使用,也更高效。PPL还包括诸如并行算法(parallel_for_each、parallel_transform、parallel_reduce、parallel_sort等)之类的东西以及不包括在C++11并发库中的并发容器。
还值得注意的是,PPL和英特尔的TBB (线程构建块)设计为在很大程度上共享相同的接口,并且TBB在Linux上受支持,因此在使用PPL时有一些跨平台的可移植性。英特尔、微软和英伟达联合提议为未来版本的C++标准(C++14和更高版本)提供一个并行算法库,该标准基于PPL/TBB。
发布于 2013-05-21 02:17:21
Boost线程很容易,可移植,有很好的文档,是我现在C++中最常用的并发形式。如果你正在考虑进行linux构建,不要依赖任何VC特性,否则你的迁移将是非常痛苦的(之前我自己也是这样做的……)。
尽管如此,新的STL内容在大多数方面与boost非常相似,因此您可以使用boost作为std的垫脚石,而不会有太多痛苦。在我做出具体决定之前,我会在differences between boost and C++11 threads上阅读这篇文章,并解释你的用例。
我使用PPL的经验相当有限,但创建任务(线程)的感觉可能与传统线程略有不同,并且具有不同的控制路径选项。如果采用PPL方法,在Visual Studio/Windows中也很有可能得到修复--所以在评估库选择时要注意这一点。我确实读到过好的PPL示例是有点稀疏的(可能是因为快速搜索在比较PPL和其他并发库时没有给出更好的结果)。
https://stackoverflow.com/questions/16655305
复制相似问题