1

ブースト asio ライブラリを使用しています。これは私の実装です

boost::asio::io_service ioservice;
boost::asio::io_service::work work(ioservice);
boost::thread_group threads;
for (int i = 0; i < 10; i++)
{
    threads.create_thread(
      boost::bind(&boost::asio::io_service::run, &ioservice));
}

次に、io サービス オブジェクト (非同期の読み取り/書き込み/タイマーなど) が必要なときはいつでも、この ioservice オブジェクトのインスタンスを引数として渡します。多くの非同期操作を処理する必要がある場合は、スレッド数を増やすだけです。

同僚の中には、1 つのワーカー スレッドだけで複数の io サービス オブジェクトを作成する人もいます。

正しい実装はどれですか? 改善できますか?

4

1 に答える 1

2

どちらのアプローチも正しいですが、何を達成しようとしているかによって異なります。Anio_serviceは、優れたクロスプラットフォームのスレッドセーフ ワーク キューを作成します。

io_service何らかの作業を特定のスレッドで処理する (つまり、特定の作業項目をシリアル化する) 場合は、1 つのスレッドで実行するのが理にかなっています。

io_serviceいくつかの作業を処理したいが、処理するスレッドや順序を気にしない場合は、1 つの作業を複数のスレッドで実行するのが理にかなっています。

于 2013-05-01T20:27:54.777 に答える