1

boost-asio チュートリアルに従っていますが、 boostを使用してマルチスレッド サーバーを作成する方法がわかりません。私は昼間のクライアント昼間の同期サーバーをコンパイルしてテストし、通信を改善しました (サーバーはクライアントにコマンドを要求し、それを処理し、結果をクライアントに返します)。ただし、このサーバーは一度に 1 つのクライアントしか処理できません。

ブーストを使用してマルチスレッド サーバーを作成したいと考えています。実行する昼間の非同期サーバーもあります

boost::asio::io_service io_service;
tcp_server server(io_service);
io_service.run();

メインプログラム関数で。問題は、Boost が内部のどこかに各クライアントのスレッドを作成しているのかということです。これはマルチスレッド ソリューションですか? そうでない場合 - ブーストでマルチスレッドサーバーを作成する方法は? アドバイスをありがとう。

4

2 に答える 2

3

このチュートリアルを見てください。簡単に言えば:

  • 複数のスレッドでの io_service.run() はスレッドプールを提供します
  • 複数の io_services は完全に分離されたスレッドを提供します
于 2012-12-18T16:36:55.323 に答える
2

複数のクライアントをサポートする場合は、スレッドを明示的に操作する必要はありません。ただし、そのためには、非同期呼び出しを使用する必要があります(リストしたチュートリアルで使用されている同期呼び出しとは対照的に)。非同期エコー TCP サーバーの例を見てください。スレッドを使用せずに複数のクライアントにサービスを提供します。

is boost creating a thread for each client somewhere inside?

非同期呼び出しを操作する場合、boost asio はこれらのことを舞台裏で行っています。スレッドを使用することもできますが、一度に複数のソケットを操作するための優先メカニズムが他にあるため、通常は使用しません。たとえば、Linuxでは、 epollselect、およびpoll (優先順) があります。Windows の状況はわかりません。他のメカニズムがあるか、優先順位が異なる可能性があります。しかし、いずれにせよ、boost asio がこれを処理し、プラットフォームに最適なメカニズムを選択して、それらの非同期呼び出しの背後に隠します。

于 2012-12-30T13:09:53.307 に答える