2012-10-20 32 views
3

我有一些使用GCD進行併發和移除顯式鎖和線程的經驗。來自Grand Central Dispatch的dispatch_async()和來自C++的std :: async 11

C++ 11提供了std :: async,它似乎提供了一些類似的功能(我不是C++專家,請不要責怪我錯誤)。

撇開口味和語言偏好的爭論,有沒有比較兩個性能的基準,特別是像iOS這樣的平臺?

從實際角度來看,C++ 11的std :: async值得嘗試嗎?

編輯:

由於stackmonster回答,C++ 11並沒有提供的東西完全一樣調度隊列本身。但是,是否有可能使用原子數據結構(和可論證的lambda函數)創建一個特設的串行隊列來實現這一點?

+0

如果您想自己測試,可以下載Libdispatch sans blocks。 – CodaFi

+0

是的,但你會測試什麼? –

+0

也許是開銷? – ZhangChn

回答

3

C++ 11 std :: async幾乎沒有Grand Central Disatch那麼複雜。

它更類似於java.util.concurrent包提供的異步併發模型 爲回調提供模板,但沒有內置的性能優勢。

我會說他們之間的區別就是這個。

回調模板沒有特定的性能特徵。 GCD全部都是關於性能,以及對這些回調進行線程化/多路複用以減少線程創建開銷並允許排隊和任務依賴以及線程池。

std :: async的啓動策略與GCD的複雜性沒有比較,並且不是實現可移植的。

我不太確定這兩者之間的基準是否真的可以證明,因爲它們並不相似。

3

正如其他人已經指出的那樣,這個比較通常沒有意義,因爲它的蘋果/桔子性質,但如果你真的想我想你可以測試std :: async和std :: future針對一些基於GCD的未來實現你自己拼湊起來,看看哪一種方法能夠爲已知的一組計算提供最快的速度。可能會有點模糊,但是你必須成爲一個可以做到的人,因爲這個實驗可能太奇怪了,而且對於其他任何人都很感興趣。 :-)

相關問題