2012-04-08 8 views
3

Javaでコードを書くことがありますが、マルチコアマシンで100%以上のCPUを使用することがあることに気付きました。 33個のCPU(Amazon EC2)を持つマルチコアマシン上でいくつかのコードを実行しています。JavaプロセスですべてのCPUを使用できるようにしたいので、マシンの使用率が非常に高くなります。それは可能ですか、それとも100%以上のCPUを使用するかを決めるためにJavaに任せられていますか?マルチスレッドを使用するようにコードを変更することは望ましくありません。マシン上でJavaがすべてのCPUパワーを使用する方法を教えてください。

+1

利用可能な計算能力の100%以上を使用することは非常に印象的です。 「マルチスレッドを使用するようにコードを変更したくない」という事実にもかかわらず、マルチコアマシンのすべての計算能力を使用することは同様に印象的です。 –

+1

@Kirk:私は「トップ」レポートを報告しています。同じJavaプロセスのマルチコアマシンで複数のCPUを使用していると推測しています。このコードではスレッドの明示的な言及は一度もありませんでした。 – kloop

+0

スレッドプールなどでマルチスレッドソリューションを選択しなくても、Javaのアルゴリズムで複数のスレッドを活用することはできません –

答えて

6

複数のスレッドまたはプロセス(または実行中のプロセス以外のもの)を使用せずに、n -coreマシンでn * 100%の使用率を達成することはできません。

オペレーティングシステムは、より多くの要求がない限り、各スレッドを1つのスレッドで実行することを決めました。この要求がなければ、OSはコードを単一のスレッドで実行できるようになり、潜在的にCPUのサイクル全体を最大限に活用できますが、他のスレッドはそのままにしておきます。

+0

興味深い。私は、Javaがコードの主な実行と並行して実行するいくつかのコードがあると思います。おそらく、仮想マシンの管理コードや、別のスレッドの何かがあります。 – kloop

+1

@kloop GCはSwingのEDTと同様に独自のスレッドで動作します。 – Jeffrey

2

プログラムが明示的にマルチスレッドではない場合(自分でスレッドを開始しない場合)、複数のコアを利用できる唯一の理由は、作業を委任するライブラリの機能をいくつか使用しているためです。スレッドプールどうやらあなたはそれを支配していないので、もっと必然的に働かせることはできません。

S3インスタンスですべてのCPUを利用することについて:プログラムを何度も起動できます(33 CPUの場合は33回)。それが不可能な場合は、処理のどの部分がスレッドプール上で作業を作成しているかを知る必要があります。

関連する問題