2016-05-15 17 views
0

私は行列乗算のアプリケーションを書いています。JavaシングルスレッドCPU使用とマルチスレッドCPU使用

私はそれを完了し、比較のためにリソースモニタを見ました。

  1. 3000x3000の行列が掛けまず第一に。
  2. シングルは、私は、Windowsのリソースモニターをチェックすると、マルチ
  3. をスレッドよりも遅かったスレッド、私はマルチスレッドアプリはシングルスレッドよりも多くのスレッドを持っていることがわかります。私は "javaw.exe"をチェックして、シングルスレッドのアプリケーションを作成しても、それよりも多くのスレッドを持っています。それは私のことではない。それは "javaw.exe"そのものです。しかし、長い話が短く、シングルスレッドのjavawが示されました。例えば、16スレッドです。マルチスレッドの例 - 24 -
  4. マルチスレッドのアプリケーションが動作している間、CPU使用率はほぼ100%でした。ほとんどの使用は「javaw.exe」に属します。しかし、シングルスレッドアプリケーションでは、使用は約30-35%でした。

私はi5 CPUを持っています。デュアルコア。 4つのコアは論理的です。

Windowsリソースモニタを確認すると、マルチスレッドアプリケーションの場合、CPU 0-1-2-3の使用率はほぼ100%でした。

しかし、シングルスレッドアプリでは、CPU 0-1-2-3はまだ使用していました。ほぼ同じパーセンテージであるが、100%にも近くない。

ここで私の質問になります。私がシングルスレッドのアプリケーションを実行していたとき、誰が他のコアを使用していましたか?もちろん他のプロセスでも使用できます。あるいは "javaw.exe"自体(私は自分自身に言った、それはマルチスレッドでした)。しかし、JVMがシングルスレッドプロセスをマルチスレッドとして実行する可能性はありますか?

+1

JVMは常に複数のスレッド(GCスレッドなど)を実行します。 –

+0

そうですね。私を訂正してくれてありがとう。私は、単一スレッドのアプリケーションをマルチスレッドのJVMに変換する方法はないと思いますよね? – Diga

答えて

1

JVMがシングルスレッドの プロセスをマルチスレッドとして実行する可能性はありますか?

いいえJVMは、複数のスレッドを持つことになりますが、それはしませんし、ちょうどあなたが自分でスレッドを作成(またはExecutorのようないくつかの他のマルチスレッド・メカニズムを使用)しない限り、あなたのプログラムをマルチスレッドすることを決定することはできません。

+0

あなたの答えをありがとう。私はそれが意味をなさないことを知っています。しかし、私は二重チェックしたい。 – Diga