来自 Grand Central Dispatch 的 dispatch_async() 和来自 C++11 的 std::async

Zha*_*Chn 6 c++ concurrency asynchronous ios c++11

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

C++11 提供了 std::async,它似乎提供了一些类似的功能(我不是 C++ 专家,请不要责怪我的错误)。

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

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

编辑:

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

del*_*ser 4

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

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

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

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

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

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