3

ExecutorServiceJava での s のオーバーヘッドの可能性に関連する質問があります。

現在の実装ExecutorService Aでは、5 つのスレッドの容量があります。

  • タイプのスレッドを実行しAます。
  • タイプAスレッドは、データベースの読み取りと書き込みを行います。

これで、 type のスレッドは、 type のいくつかのスレッドが終了Bした後に実行されます。A

  • 実行されるタイプBスレッドの数は、その時々で異なります。
  • タイプBスレッドは、(データベースではなく) ファイルシステム IO を実行します。

だから私はすべきですか

  • ExecutorServiceタイプのBスレッドを処理するために新しいものを追加します
  • または、その容量を増やしてExecutorService AタイプBスレッドを実行する必要がありますか?

Java が を 2 つ持つために余分なオーバーヘッドが発生する可能性があると考えていますがExecutorService、その一方でスレッドの総数はいずれにせよ増加します。それはまったく問題ですか?

4

2 に答える 2

4

2 つをお勧めします。そうすれば、パッケージが提供するExecutorServicesさまざまな を利用できます。ExecutorServicejava.util.concurrent

コードが簡単になり、オーバーヘッドは無視できます。

  • ExecutorServicea 固定スレッド プールが 5 つのスレッドに設定されています。
  • ExecutorServiceb キャッシュされたスレッド プールを使用します。
于 2010-05-13T10:05:39.730 に答える
1

スレッド数が 5 の場合で、スレッド プールの容量を使い果たしていなければ、どちらの方法でもオーバーヘッドは取るに足らないものであり、最も単純なルートと思われる方法を選択する必要があります。

于 2010-05-13T09:40:17.513 に答える