私は初めてboost::asioを使用して、N台のサーバーに接続してそれらからデータを読み取るプロセスを作成しようとしています。
私の質問は、非同期性の仕組みに関するものです。私の設計目標は、すべてのサーバーに並行して接続し、すべてのサーバーから並行してデータを読み取ることです。これは、async_connect と async_read を使用して実行し、io_service::run() を N 回呼び出してから、結果を読み取る必要があります。問題は、並列処理を実現するために、1 つのスレッドから io_service::run() を N 回連続して呼び出すだけで十分かということです。
これは asio の実装の問題であることに注意してください。具体的には、connect_async と write_async を呼び出すときに、OS が戻る前に接続/読み取りを開始するように信号を送るか、単に同期接続/読み取りタスクをワーカー スレッドに委任し、すぐに戻る?- 単一のスレッドから io_service::run() を呼び出すことが、タスクのシリアル実行を意味する場合。
もちろん前者だと思いますが、誰か確認してください。非同期関連のドキュメント (http://think-async.com/Asio/boost_asio_1_3_1/doc/html/boost_asio/overview/core/basics.html) では、async_xxx 呼び出しがいつ返されるかについて言及されていません。私の質問を明確にするでしょう。