9

ネットワーキング/オペレーティング システムに関する学校の最近のコースで、スレッド プールについて学びました。現在、彼の基本的な機能は非常に単純であり、私はこれを理解しています.

しかし、私の本で指定されていないのは、スレッド プールが使い果たされたときに何が起こるかということです。たとえば、20 個のスレッドを含むプールがあり、20 個の接続されたクライアントがあるとします。別のクライアントが接続を試みましたが、プールにスレッドが残っていません。その場合はどうなりますか? クライアントはキューに入りますか? システムは別のスレッドを作成してプールに入れますか? 他の何か?

4

3 に答える 3

6

答えは、言語、オペレーティング システム、およびプールの実装によって大きく異なります。

スレッドプールが使い果たされるとどうなりますか? 別のクライアントが接続を試みましたが、プールにスレッドが残っていません。その場合はどうなりますか? クライアントはキューに入りますか?

通常、サーバーの状況では、ソケットの設定に依存します。ソケット接続が OS によってキューに入れられるか、接続が拒否されます。これは通常、スレッドプールによって処理されません。~unix オペレーティング システムでは、このキューまたは「バックログ」はlistenメソッドによって処理されます。

システムは別のスレッドを作成してプールに入れますか?

これは、スレッドプールによって異なります。一部のプールは固定サイズであるため、スレッドは追加されません。他のスレッドプールは「キャッシュされた」スレッドプールであるため、空きスレッドを再利用するか、利用可能なスレッドがない場合は新しいスレッドを作成します。多くの Web サーバーでは、プールに最大スレッド設定があるため、リモート ユーザーが多数の同時接続を開始してシステムをスラッシングすることはありません。

于 2013-06-13T14:27:34.363 に答える
1

これは、スレッドプールで使用されるポリシーによって異なります。

  • プール サイズはstaticにすることができ、新しいスレッドが要求されると、呼び出し元はセマフォなどの同期プリミティブで待機するか、要求をキューにプッシュできます

  • プール サイズは無制限にできますが、作成するスレッドが多すぎるとパフォーマンスが大幅に低下する可能性があるため、これは危険な場合があります。多くの場合、プール ユーザーによって設定された最小値と最大値の間の範囲です。

  • プールは、コンテキストに応じて動的ポリシーを使用できます。CPU や RAM などのハードウェアリソース、同期プリミティブやスレッドなどのOSリソース、現在のプロセスリソース (メモリ、スレッド、ハンドルなど)。

スマート スレッド プールの例: http://www.codeproject.com/Articles/7933/Smart-Thread-Pool

于 2013-06-13T14:31:02.023 に答える
0

スレッドプールの実装に依存します。キューに入れられたり、新しいスレッドが作成されたり、後で戻ってくるというエラー メッセージが表示されることさえあります。または、スレッド プールを実装している場合は、好きなことを行うことができます。

于 2013-06-13T14:22:51.593 に答える