2011-07-06 11 views
4

スレッドとスレッドプールの違いを教えてもらえますか?それは使用するのが最善です...?スレッドとスレッドプールの相違点

+2

[こちら](http://download.oracle.com/javase/tutorial/essential/concurrency/index.html)を見ましたか? –

答えて

10

スレッドは1回しか実行できないため、タスクごとにスレッドを使用する必要があります。しかし、スレッドを作成して起動するのはいくらか高価であり、実行するスレッドが多すぎる(正確な名前を記憶していない)状況が発生し、パフォーマンスがさらに低下する可能性があります。

スレッドプールは、名前が示すように、常に実行されているワーカースレッドのプールです。これらのスレッドは、通常、タスクをリストから取り出して実行し、次のタスクを実行しようとします。タスクがない場合、スレッドは待機します。スレッドプールを使用して

はいくつかの利点があります。

  • あなたが正常に(あまりにもJVMによって異なります)お使いのシステムのためのスレッドの最適な数を持っているタスク
  • ごとにスレッドを作成する必要はありません
  • あなたが書き込みタスクに集中し、インフラに

編集を管理するために、スレッドプールを使用することができます。ここでは、並行性に関するいくつかのかなり良い記事は、一般的には、次のとおりです。Sutter's Mill、下部にもっとリンクがあります。主にC/C++用に書かれていますが、一般的な概念は同じです。同時実行ソリューションとハードウェアの相互依存性も記述されているためです。同時実行パフォーマンスの問題を理解するための良い記事はthis article on drdobbs.comです。

+0

ありがとうございました。ありがとうございました。簡単な例をあげてください。 –

+0

「実行するスレッドが多すぎます(正確な名前は記憶されていません)」。あなたは "飢え"を探している用語ですか? – SteeveDroz

+0

@Altatur 'starvation'は、スレッドが(CPU時間のような)リソースを必要としないという意味で、これの症状です。 「オーバーサブスクリプション」は、私が探している用語のようです。 – Thomas

3

スレッドプールは、統一されたタスクを実行するために割り当てられたスレッドの集合です。 スレッドプールパターンを使用する利点は、同時に実行できるスレッド数を定義できることです。これは、高いCPU負荷またはメモリ不足状態などによるサーバのクラッシュを回避するためです。サーバーのハードウェア容量は1秒あたり最大100要求をサポートできます。

データベースプーリングには、スレッドプールと同様の概念があります。

このパターンは、ほとんどのバックエンドサーバーのアプリケーションプロセスで広く使用されています。

スレッドはタスクを実行する単位ですが、

関連する問題