1. ホーム
  2. c++

std::asyncとstd::threadsをいつ使うか?

2023-11-30 07:49:50

質問

どなたか、それぞれをどのようなときに使うか、ハイレベルな直感をお伝えいただけないでしょうか?

参考文献です。

どのように解決するのですか?

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

現在では std::async は、おそらく非常に長く実行される計算か、かなり単純なプログラムの長く実行される IO のいずれかを処理するのに最適なものです。しかし、これは低いオーバーヘッドを保証するものではありません (実際、この仕様では裏でスレッドプールを使って実装することが困難になっています)。そのような場合は std::thread を使用して独自のスレッド プールを構築するか、Microsoft の PPL や Intel の TBB のようなものを使用する必要があります。

を使用することもできます。 std::thread を使って、より現代的で移植性の高い方法で書かれた「伝統的な」POSIXスレッドスタイルのコードにすることもできます。

Bartosz Milewski は、この方法のいくつかの限界について議論しています。 std::async が現在指定されている方法について、彼の記事 C++11 の非同期タスク:まだそこまで到達していない