0

私は初めて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 呼び出しがいつ返されるかについて言及されていません。私の質問を明確にするでしょう。

4

1 に答える 1

1

io_service::run()asio の心臓部は、ブロッキング呼び出しであるへの呼び出しで始まるイベント ループです。を呼び出すときはasync_connect、接続操作をio_servicesイベント キューに入れます。並列処理を実現するには、スレッド プールを作成し、各スレッドをrun()同じio_serviceインスタンスで呼び出す必要があります。

于 2012-06-03T01:53:02.110 に答える