6

我有一些使用 GCD 进行并发和删除显式锁和线程的经验。

C++11提供了std::async,好像也提供了一些类似的特性(我不是C++专家,请不要怪我有错)。

撇开风格和语言偏好的争论不谈,是否有任何基准来比较两者的性能,尤其是对于像 iOS 这样的平台?

从实际的角度来看,c++11 的 std::async 值得尝试吗?

编辑:

正如 stackmonster 所回答的那样,C++11 本身并没有提供与调度队列完全相同的东西。但是,是否可以使用原子数据结构(和可论证的 lambda 函数)创建一个临时串行队列来实现这一点?

4

2 回答 2

4

C++ 11 std::async 并不像中央调度那样复杂。

它更类似于 java.util.concurrent 包提供的异步并发模型,该包提供回调模板,但没有内置的性能优势。

我想说他们之间的区别就是这个。

回调模板没有特定的性能特征。GCD 完全是关于性能,以及线程化/多路复用这些回调以减少线程创建开销并允许排队和任务依赖以及线程池。

std::async 的启动策略在复杂性上无法与 GCD 相提并论,也不是实现可移植的。

我不确定两者之间的基准会真正证明什么,因为它们并不是那么相似。

于 2012-10-20T17:40:20.417 回答
3

正如其他人已经指出的那样,由于其苹果/橙子的性质,这种比较通常毫无意义,但如果你真的想我想你可以针对一些基于 GCD 的期货实现测试 std::async 和 std::future 你自己拼凑并查看哪个为一组已知的计算提供最快的期货。可能有点有趣,但你必须是做这件事的人,因为这个实验可能太奇怪和深奥而无法引起其他人的兴趣。:-)

于 2012-10-21T06:26:40.197 回答