8

Thread-pool (pthreads の助けを借りて C で) を実装する概念は何ですか? スレッドプールから実行するようにスレッドを割り当てるにはどうすればよいですか?

4

3 に答える 3

11

スレッドプールは、アプリケーションの起動時に作成される固定数のスレッドのコレクションです。スレッドは、通常はセマフォによって制御されるキューを介して、要求が来るのを待っています。要求が行われ、少なくとも 1 つのスレッドが待機している場合、スレッドは起動され、要求を処理して、セマフォでの待機に戻ります。使用可能なスレッドがない場合、要求はスレッドが使用可能になるまでキューに入れられます。

一般に、スレッドプールは、リクエストごとに単に新しいスレッドを開始するよりも効率的なリソース管理方法です。ただし、一部のアーキテクチャでは、リクエストの読み込みに応じて、アプリケーションの実行時に新しいスレッドを作成してプールに追加できます。

于 2009-07-27T13:16:49.143 に答える
4

以前の回答で何かを明確にするには:

より多くのスレッドをインスタンス化することが非効率につながる理由は、コンテキスト切り替え時間です。OSは、プロセッサ上で定期的に1つのスレッドを別のスレッドに切り替えます。これには、あるスレッドの状態を保存し、別のスレッドの状態をメモリからロードすることが含まれるため、コンテキストスイッチごとに無視できない時間Nミリ秒かかります。

たとえば、スレッドが10個ある場合、コンテキスト切り替えには10*Nミリ秒かかります。1000スレッドの場合、1000*Nミリ秒です。同時スレッドの数が増えると、最終的にコンテキストスイッチングがマルチスレッドから得られる効率を圧倒し始めます。アプリケーションには、スレッドの数が最も多いという点でスイートスポットがあります。実験によってこのスイート数を決定したら、スレッドプールの最大サイズをそのスレッド数に設定して、マルチスレッドから最大の効率を得ることができます。

于 2012-09-26T02:22:51.747 に答える
2

アノンの答えに加えて、固定数のスレッドが実行されている固定スレッドプールがあることに言及したいと思います。作業が利用できない場合に動的に拡大および縮小できる、キャッシュされたスレッド プール。動的スレッド プールは、スレッドの最大数および/または作業キューの最大長によってバインドすることもできます。この種のものに実際に設定された用語があるとは思いません.Cで書かれた非固定TPに遭遇することはめったにありませんが、少なくとも固定TPがそこにある唯一の種類ではないことを知っておく必要があります.

于 2011-02-25T05:42:40.483 に答える