std::asyncとstd::threadsをいつ使うか?
質問
どなたか、それぞれをどのようなときに使うか、ハイレベルな直感をお伝えいただけないでしょうか?
参考文献です。
- boost::thread と boost::mutex を c++11 の同等品に置き換えるのはスマートですか?
- 他のstd::threadメカニズムよりもstd::promiseを使用するのが良いのはいつですか?
どのように解決するのですか?
これは、実際には
どちらか一方
というわけではなく、手動で作成した 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 の非同期タスク:まだそこまで到達していない
関連
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] std::move()とは何ですか?また、どのような場合に使用するのですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】どのような時にどのようなポインタを使えばいいのでしょうか?
-
[解決済み] boost::threadとboost::mutexをc++11の同等品に置き換えるのは賢い選択ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] なぜstd::asyncを使わなければならないのですか?
-
[解決済み] boost::threadとboost::mutexをc++11の同等品に置き換えるのは賢い選択ですか?