2016-05-06 4 views
3

固定スレッドプールは、我々は、任意のアプリケーションを設計していると我々はどのようにして固定されたスレッドプールを使用していると仮定固定スレッドプールの理想的なサイズはどれくらいですか?

Executors.newFixedThreadPool(10); 

以下のようにエグゼキュータ方法整数変数を渡すことによって、Javaアプリケーション内のスレッドの数を制限するために使用されています理想的な固定スレッドプールサイズの決定、または固定スレッドプールサイズをどのような基準で決定する必要がありますか?

+0

関連するSE質問:http://stackoverflow.com/questions/8307423/java-executorservice-scaling/ –

答えて

3

まず、

1)あなたは、アプリケーション全体またはアプリケーション内の特定のタスクのためのFixedThreadPoolを作成しています。

2)あなたのアプリケーションがデプロイされているサーバは、どのように多くのスレッドCPUごとに、どのように多くのCPUのをサポートしています。

3)があるかもしれません場合は、サーバーがより多くを持っているのに対して、スレッドの少ない数を割り当てている、またはそれ以上を割り当てるかもしれない、とあなたのタスクは、その多くを必要としません。それは多かれ少なかれ、資源の無駄に似ています。

スレッドプールのサイズはほとんどハードコードされてはなりません。代わりに、プールサイズは構成メカニズムによって提供されるか、Runtime.availableProcessorsを参照して動的に計算されます。あなたが式に基づく方法を探しているなら

良い詳細な理解はほとんどありませんhere

+0

お返事ありがとうございます。提供されたリンクは私の質問に答える詳細な説明を持っています。 – Jai

+1

リンクは、_Java Concurrency In Practice_のセクション8.2の海賊版された(およびアトリビュートされていない)コピーです。 –

0

可能です - あなたはそれがあることを覚えておくことが重要ですどのように多くのコアをサポートしていますが についての情報を得ることができ、もちろん、あなたの場合コンテナにアプリケーションを配備すると、アプリケーションがフレームワークやライブラリを使用して構築されています は、すでに複数のサービスを提供し、あなたのシステムで作成された多くのスレッド・プールを持っているかもしれません。それに加えて、仕事の種類(CPU/IO集約も重要な役割を果たすだろう)。だからあなたの最善の策は、いくつかの番号から始めて、あなたのアプリケーションをプロファイルし、そのスイートスポットを得ることでしょう。まず始めに良い推測ができます(アプリケーションの環境が不明な場合)hereから行うことができます。あなたは簡単にJConsoleと接続し、要約は のMBeanで見ることができることにより、アプリケーション内のすべてのスレッドを見ることができます - >のjava.lang - >スレッディング - >属性。最後に

- 実証的証拠はこれらのケースでは最高です。

関連する問題