2017-10-31 8 views
0

Java Webプロジェクトでは、ユーザーは自分のタスクをWebに送信します。これらのタスクを処理するために、タスクを処理するために10個のスレッドを含むスレッドプールを使用します。すべてのタスクはスレッドに構築され、スレッドプールに送信されます。スレッドプールは静的変数に設計されています。つまり、すべてのタスク(スレッド)が同じスレッドプールを共有します。
今日、200人のユーザーが自分のWebに来て、その後、彼らは彼らの仕事は非常に非常に遅い実行されたことを訴えた...スレッドプール内のスレッド数を決定する方法

  • は、静的なスレッドプール内のスレッドがあまりにも少ないですか?おそらくその数は30であるべきですか? 50?
  • のstaticスレッドプールを使用しないでください。
  • 多分私はスレッドプールを使用すべきではありません、多くのタスクがあるので、私はただtaskThread.start()できますか?

答えて

0

通常、処理の対象となるIOとコアの量を把握できます。完璧な式は次のようになります。

number_of_cores*(1/cpu_sticky) 
あなたはそれが非常にIOであることを認識した場合に非常にCPU集中的に高いを持っているのに対し、cpu_stickyは、0と1の間はそう、 cpu_stickyは、(0.1と言う)は非常に低いです

cpu_sticky(たとえば.9)。

ほとんどの場合、DB内の1つ以上の行をロックする長いDB検索や検索が必要なので、1つ以上のスレッドが完了を待つ必要があります。その場合、多くのスレッドを持っていますが、それぞれ遅いです。

+0

Javaでnumber_of_coresを見つけるための副メモとして、そのように使用できます。 int number_of_cores = Runtime.getRuntime()。availableProcessors(); – mrgenco

関連する問題