1. ホーム
  2. c++

[解決済み] なぜ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 .