0

これは VC++ で書かれた Windows サーバー アプリケーションです。サーバーに送信されるさまざまなリクエスト オブジェクトを処理するために、スレッドプールを使用します。明らかに、スレッドが特定の要求に取り組んでおり、その応答をソケットに書き込んでいる場合、他のスレッドはそれが終了するまで待機する必要があります。これはおそらくスレッドプールを使用する効率的な方法ではないのではないかと心配しています。

したがって、私の質問は次のとおりです。スレッドプール内のスレッドがスレッド同期オブジェクトが解放されるのを待っている場合、スレッドプールを使用する効率的な方法ではありません。これを回避する方法はありますか?(おそらく、作業するスレッドを割り当てる前に、オブジェクトが空いているかどうかを事前に知っている)

4

1 に答える 1

1

ソケットに書き込みを行うスレッドを 1 つだけ持つことができます。他のスレッドはデータをキューに入れ、出力スレッドはキューからデータを読み取り、ソケットにデータを書き込みます。

もちろん、続行するためにスレッドがソケットからの応答を待つ必要がないことを前提としています。

さらに、スレッドがソケットで待機する頻度と時間に大きく依存します。たまにしか起こらないのであれば問題ありません。スレッドは最大速度で処理され、送信する前に別のスレッドの送信が完了するまで待機する必要がある場合がまれにあります。しかし、スレッドがソケットの待機に多くの時間を費やしている場合は、別の方法を見つけた方がよいでしょう。ソケットを処理する専用スレッドを備えた出力キューは非常にうまく機能し、セットアップも非常に簡単です。

于 2013-08-10T02:07:03.000 に答える