シングルスレッドモードで実行しているときにIO完了コールバックが実際のIO操作と同じ順序で呼び出されることは明らかですが、それを確認する書類の一部。明示的にどこに書かれていますか?ASIO IO完了コールバックの順序と実際のIO操作の順序との比較
答えて
IO-オブジェクトクラス上のasync_xxx方法のすべてのドキュメントは、このような経過を持っている:
にかかわらず、非同期操作はすぐにか完了したかどうかの、ハンドラはこの関数内から呼び出されることはありません。ハンドラの呼び出しは、
boost::asio::io_service::post()
を使用するのと同等の方法での方法で実行されます。boost::asio::io_service::post()
のドキュメントを見てみると
...
この関数は、しかしio_serviceは、この関数の中からハンドラを呼び出すことができるようにすることなく、与えられたハンドラを実行するためにio_serviceを依頼するために使用されます。
io_serviceは、現在呼び出されているハンドラのみで
run()
、run_one()
、poll()
又はpoll_one()
メンバ関数スレッドで呼び出されることを保証します。
これは保証の完全な範囲です。
コードが非同期イベントの一時的な順序に依存している場合は、非同期コードではありません。
をrun_one()ファンクションブロック1件のハンドラが派遣されるまで、またはio_serviceが停止されるまで:
run_one()
のさえドキュメントは、それが派遣したハンドラに関する一切の保証を行いません。
ます(読み込みなど)は、個々の非同期操作を配列決定しなければならない場合は、どちらかが義務付けられている:
は最初のハンドラから第2の動作を開始する、または
オペレーションのハンドラが未処理である間にフラグセットを保持し、フラグが偽のときにのみ別のオペレーションを開始する。
async_writeが進行中の場合(リモートエンドはハートビート応答としてメッセージを受け付けます)、受信したプロトコルのハートビート要求(TCPベースのプロトコル)を無視します。この素敵なショートカットは、異なるepoll反復間で完了コールバックを並べ替えないASIOに関する(有効な)仮定が成立する場合にのみ機能します。つまり、論理が文書化された、または文書化されていないASIOの動作に依存している理論的な領域からの疑問です。 – bobah
@bobah論理は、文書化されていないAsioの動作に依存しています。ショートカットが実際に役立つ場合は、リアクタスタイルの操作でロジックを明示的にプログラミングすることを検討する価値があります。 –
@bobahわかりません...あなたのコードです。しかし、私の場合は、明示的に表現された操作の暗黙的な順序付けをすることを好みます。 –
- 1. HaskellのIOの実行順序
- 2. シェルのIOリダイレクトの順序、パイプのバージョン
- 3. と操作の順序
- 4. スウィフト列挙の順序と比較
- 5. DataGridViewの実際の順序
- 6. 操作の順序(== vs not)
- 7. システムテストの操作順序?
- 8. Visual Studio 2012スキーマの比較:列の順序と制約名
- 9. ファイルの操作順序の保証
- 10. ランダムな順序で2つのテキストファイルをJavaと比較する
- 11. Javascript操作順序の問題
- 12. Javaの正しい操作順序
- 13. Mysql "操作の順序"質問
- 14. Pythonのweakrefコールバックと__del__の実行順序
- 15. アセンブリーとロジックアナライザー - 実行順序
- 16. 数と順序
- 17. スクリプトのロードと実行の順序
- 18. 'and'と 'or'の操作の順序は何ですか? Pythonで
- 19. valueOfが呼び出されたときの操作の順序
- 20. ユニティスクリプトの実行順序とスタート()
- 21. Djangoテストの実行順序とテーブル
- 22. 角度とjqueryの実行順序
- 23. HTML解析順/スクリプトの実行順序
- 24. コンストラクタとコピーコンストラクタの順序
- 25. PrimeFacesとJQuery:リソースの順序
- 26. Rsyncと同期の順序
- 27. ループとオペレーションの順序
- 28. 変換とスタックの順序
- 29. C++入力ストリーム:SolarisとLinuxの操作順序
- 30. Node.JS MongoDB操作順序使用例
誰かが今日downvoting spreeにいるのですか? – bobah