Eclipseで実行するのにかなり時間がかかるプログラムを作成しました。私のCPUを25%にしかロードしていないので、それはさらに時間がかかります(私はクワッドコアを使用しており、プログラムは1つのコアを使用していると仮定しています)。プログラムが最大限に活用するために4つのコアをすべて使用する方法はありますか? Javaはネイティブにマルチスレッドになっているはずなので、なぜ25%しか使用しないのか分かりません。Javaアプリケーションが使用するCPUの量を手動で増やす
答えて
Javaはマルチスレッドですが、アプリケーションが1つのスレッドでのみ実行される場合は、1つのスレッドのみが使用されます。 (Javaがファイナライズ、ガベージコレクションなどのために使用する内部スレッドとは別に)
コードで複数のスレッドを使用する場合は、自分でスレッドを開始するか、パーティースレッドプール。後者の方が安全であることをお勧めしますが、どちらも同じようにうまくいくことができます。
アプリケーションで手動でスレッドを手動で作成および管理する必要があります。 Javaでは、2つのタスクを非同期に実行し、自動的に作業を複数のスレッドに分割することはできません。
どうすればいいですか?私はまだJavaに深く掘り下げていません。 – SkylineAddict
これは、あなたのプログラムが何をしているのかわからないので、かなり曖昧な質問です。あなたのプログラムがシングルスレッドの場合、あなたのマシン上のコア数はそれ以上速く動くことはありません。 Javaにはスレッドのサポートがありますが、自動的にコードを並列化することはありません。それをスピードアップするには、互いに並列に実行できる計算の部分を特定し、分割して再構成するために適切なコードを追加する必要があります。あなたのプログラムが何をするかについての情報がなければ、私はあなたを助けることができません。
Javaスレッドはシステムスレッドと同じではありません。 JVMには、実際のシステムスレッドにJavaスレッドを公平に配置しようとする独自のスレッドスケジューラが用意されていることがよくありますが、それが実際に保証されるわけではありません。
はい、Javaはマルチスレッドですが、マルチスレッドは「魔法」ではありません。
スレッドクラスまたはExecutorフレームワークのいずれかを見てください。基本的に、あなたは、このような何かを、単一のプロセッサ上で実行することができ、それぞれが「サブタスク」にあなたの仕事を分割する必要があります。
Executor ex = Executors.newFixedThreadPool(4);
while (thereAreMoreSubtasksToDo) {
ex.execute(new Runnable() {
public void run() {
... do subtask ...
}
});
}
パラレル一つにシリアルルーチン/アルゴリズムを回すと、必ずしも容易ではありません。特に「スレッドセーフティ」と呼ばれる一連の問題について知っておく必要があります。 thread-safety in Javaについて書いた資料に興味があり、リンクをたどると一般的にスレッド化します。キーとなる点は、データ/オブジェクトが実行中の異なるスレッド間で共有されている場合、特別な予防措置を取る。それは、あなたがただ「同じ時間に走る」ことを望む独立したものについては、上記のパターンがあなたを始めるでしょう。
あなたは少し前から学習しています(実際にはかなり学習しています)。しかし、深刻なプログラミングをしているのであれば、あなたがすべきことを学んでいます。
ここでの出発点です:http://download.oracle.com/javase/tutorial/essential/concurrency/
しかし、あなたは、Javaマルチスレッドに良い本(私はずっと前に、私がお勧めする可能性のある本は絶版になるとこれをしなかった)の中に見たいと思うかもしれません。この種の難題は、オンラインチュートリアルの代わりにテキストから学習するのに適しています。
- 1. C++プログラムのCPU使用量を増やす
- 2. wxWidgetsプログラムはCPU使用量を増やす
- 3. プログラムで制御された方法でCPU使用量を増やす
- 4. RAMの使用量を増やすR
- 5. テストプログラムを設計する:CPU使用量を増減する
- 6. 手動でCSSカウンタを増やす
- 7. C++からWindows APIを使ってアプリケーションのCPU使用量やディスク使用量を取得する方法は?
- 8. レール5のアップグレードがデータベースのCPU使用量を大幅に増やすのはなぜですか?
- 9. Excel VBA - populatingバリアント配列がメモリ使用量を増やす
- 10. iPhone:音量を増やす
- 11. Android。 CPU使用量が多すぎる
- 12. Java APIを使用してJavaアプリケーションのCpuとメモリ使用量を取得する
- 13. アプリケーションのCPU使用量を計算する
- 14. WPFアプリケーションのCPU使用量を削減する方法は?
- 15. XPアプリケーションでCPU使用率が増加しない
- 16. Androidアプリケーションの空きメモリの初期量を増やす
- 17. IISサーバーのRAM使用量を増やす
- 18. HSQLシステムメモリ使用量が増加する
- 19. アプリケーションの発熱とMacでのCPU使用率の増加
- 20. 手動でSQLサーバーのコマンドタイムアウトを増やす
- 21. Java EEサーバーを動的に増やす
- 22. Docker Toolboxのディスク容量を増やす
- 23. Hadoopワーカーノードのディスク容量を増やす
- 24. 文字列の容量を増やす
- 25. mysqlからC#で手動でIDを増やす
- 26. JavaアプリケーションでCPU使用率が高い - なぜですか?
- 27. MVVMを使用してWPFプログレスバーを手動で増減する
- 28. リミットジョブのCPU使用量SLURM
- 29. HPUXでアプリケーションのCPUおよびメモリ使用量をプログラムで取得する
- 30. Java FileInputStreamで使用される内部バッファーサイズを増やす
それはどのようにプログラムされているかによって異なります。本当に複数のスレッドを使用していますか? – lweller
あなたのコードを見ることなく、提案をするのは難しいです。あなたは今スレッドを使っていますか?出入りするデータはどこにありますか(つまり、プログラムに他のボトルネックがありますか) –
Thread、Executors、Runnableのクラスを見てください。それは途中であなたを助けるかもしれません。 – extraneon