[解決済み] なぜstd::asyncを使わなければならないのですか?
2022-03-08 16:53:44
質問
私は新しいC++11標準のすべてのオプションを深く探ろうとしています。std::asyncを使用してその定義を読んでいるとき、私は少なくともLinuxでgcc 4.8.1を使って、2つのことに気づきました。
- という名前です。 非同期 しかし、それは本当に順次的な動作になりました。 未来 非同期関数に関連付けられた フー が実行されるまでブロックされます。 フー が完了する。
-
は、他と全く同じ外部ライブラリに依存し、より良い、ノンブロッキングソリューションであることを意味します。
pthread
を使いたい場合はstd::async
を使用する場合は、pthreadが必要です。
この時点で、なぜ単純なファンクタのセットではなくstd::asyncを選ぶのかと問うのは自然なことでしょう?これは全くスケールしないソリューションで、futureを呼び出せば呼び出すほど、プログラムの応答性は低下します。
何か見落としているのでしょうか?非同期、ノンブロッキングで実行されることを許可された例を示すことができますか?
解決方法は?
非同期操作の結果が必要な場合、次のようにします。 ある をブロックする必要があります。どのライブラリを使っても同じです。このアイデアは、ブロックするタイミングを選択できるようにすることであり、うまくいけば、ブロックする時間はごくわずかです。
また、以下の点にも注意してください。
std::async
はポリシーで起動することができます
std::launch::async
または
std::launch::deferred
. もし指定しなければ、実装が選択することができ、遅延評価を使うことを選択することも十分にあり得ます。そうなると、未来から結果を取得しようとしたときにすべての作業が行われることになり、結果としてブロックが長くなってしまいます。その結果、futureから結果を得ようとしたときにすべての作業が行われることになり、ブロックが長くなります。したがって、作業が非同期で行われるようにしたい場合は
std::launch::async
.
関連
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] std::move()とは何ですか?また、どのような場合に使用するのですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】変数やフィールドがvoid宣言されている