boost::asio::io_service 実行メソッドがブロック/ブロック解除すると混乱する
Boost.Asio では、io_service::run()メソッドは、作業を処理し、io_service に関連付けられたハンドラーを呼び出す役割を果たします。スレッドが run() を呼び出すと、通常は次の状態になるまでブロックされます。
ハンドラー: ハンドラーは、非同期操作の完了時に呼び出されるコールバック関数です。
例 3a:
io_service::run() メソッドは、フィボナッチ計算 (ハンドラー) が完了するまでワーカー スレッドをブロックします。 io_service::work オブジェクトは、io_service が常に実行すべき作業を行うことを保証し、ワーカー スレッドが終了するのを防ぎます。作業が完了すると、スレッドが結合します。
質問コード内:
io_service::run() は、読み取り操作が完了するまでブロックされます。読み取りハンドラーが呼び出されるとすぐに、io_service::run() が返されます。
相違点と重要なポイント:
同期 vs.非同期
質問コードは非同期操作を使用しますが、io_service::run() は非同期操作が完了するまで待機するため、事実上同期コードと同様に動作します。同期操作と非同期操作を混在させると、複雑さが生じる可能性があります。
以上が非同期操作で「boost::asio::io_service::run()」がブロックおよびブロック解除されるのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。