75

それぞれをいつ使用するかについて、誰でも高レベルの直感を与えることができますか?

参考文献:

4

4 に答える 4

52

これは、実際にはどちらか一方というわけではありません。手動で作成された std::threads で、future を (promise と一緒に) 使用できます。Usingstd::asyncは、非同期計算のためにスレッドを起動し、Future を介して結果をマーシャリングする便利な方法ですがstd::async、現在の標準ではかなり制限されています。Microsoft の PPL からのアイデアのいくつかを組み込むために提案された拡張機能が受け入れられれば、より有用になるでしょう。

現在、std::async非常に長時間実行される計算またはかなり単純なプログラムの長時間実行される IO の処理におそらく最適です。ただし、オーバーヘッドが低いことを保証するものではありません (実際、指定された方法では、バックグラウンドでスレッド プールを使用して実装することが難しくなります)、より細かいワークロードにはあまり適していません。そのためには、独自のスレッド プールをstd::thread使用するか、Microsoft の PPL や Intel の TBB などを使用する必要があります。

std::threadより現代的で移植可能な方法で書かれた「従来の」POSIX スレッド スタイル コードを使用することもできます。

Bartosz Milewski はstd::async、彼の記事Async Tasks in C++11: Not Quite There Yetで、現在指定されている方法のいくつかの制限について説明しています。

于 2014-09-12T18:21:31.683 に答える