6

並行性のためにGCDを使用し、明示的なロックとスレッドを削除した経験があります。

C++11はstd::asyncを提供しますが、これはいくつかの同様の機能を提供しているようです(、私はC ++の専門家ではないので、間違いで私を責めないでください)。

フレーバーと言語設定に関する議論はさておき、特にiOSのようなプラットフォームの場合、パフォーマンスについて2つを比較するベンチマークはありますか?

c++11のstd::asyncは、実用的な観点から試す価値がありますか?

編集:

stackmonsterが答えたように、C++11はディスパッチキュー自体のようなものを提供しません。ただし、これを実現するために、アトミックデータ構造(および議論の余地のあるラムダ関数)を使用してアドホックシリアルキューを作成することはできませんか?

4

2 に答える 2

4

C ++ 11 std :: asyncは、グランドセントラルディスパッチほど洗練されていません。

これは、コールバック用のテンプレートを提供するjava.util.concurrentパッケージによって提供される非同期同時実行モデルに類似していますが、パフォーマンス上の利点は組み込まれていません。

違いはこれだけだと思います。

コールバックテンプレートには、特定のパフォーマンス特性はありません。GCDはすべてパフォーマンスに関するものであり、これらのコールバックをスレッド化/多重化してスレッド作成のオーバーヘッドを削減し、キューイングとタスクの依存関係およびスレッドプールを可能にします。

std :: asyncの起動ポリシーは、洗練された点でGCDと比較されておらず、実装に移植性がありません。

それらはそれほど類似していないので、2つの間のベンチマークが実際に何を証明するのか本当にわかりません。

于 2012-10-20T17:40:20.417 に答える
3

他の人がすでに指摘しているように、この比較はリンゴ/オレンジの性質のために一般的に無意味ですが、本当に必要な場合は、std::asyncとstd::futureをGCDベースの先物実装に対して自分でテストできると思いますそして、既知の一連の計算で先物を最も速く提供するものを確認します。漠然と面白いかもしれませんが、実験はあまりにも奇妙で秘教的で他の誰にも興味がない可能性があるため、あなたがそれを行う必要があります。:-)

于 2012-10-21T06:26:40.197 に答える