私が取り組んでいるプログラムでは、ユーザーがスレッドの数の間でプログラムが作業負荷を分けることができるように、そのプロセッサが持つ処理スレッドの数を入力できるようにしたい(一般的な計算を行っている)コンピュータは持っています。ユーザ定義のスレッド数はどのようにして作成しますか?
また、システム構成を検出してユーザーに質問せずにスレッド数を取得する方法がありますか?これは望ましいことですが、これを行う方法があるかどうかわかりません。
私が考えることができたのはここだけです。私はそれが完全に間違っていることを知っています、そして、あなたはそのようにスレッドに名前を付けることはできませんが、私は初心者です(まだ高校時代です)、私は試していることを示すために何かを入れたかったのです。それはIntelのハイパースレッディングを使っている場合、私は、二度、私はコア数別名、コンピュータが持っているスレッドの数を作成しようとしている、と言って、またはてるかわからない
for(int i = 0; i < threads; i++) {
Thread thread(i) = new Thread(){
public void run() {
double endNum = 0;
for(double numberRun = 0; numberRun <= calcs/threads; numberRun++){
endNum += (num * 999999999);
}
System.out.println("Thread " + i + " complete! The numerical result of the calculation is " + endNum);
}
};
}
みんなコアの数。システムが一度に実行できるスレッドより多くのスレッドを持つことができますが、私は最も効率的なことを行い、システムの同時実行が可能なスレッドの数に計算の総数を割ります。ユーザーにスレッド数を定義させてから、その数のスレッドを作成させる(またはプログラムがスレッド数を決定してその数を作成させる)方法を知らない。
これをチェックしましたか:http://stackoverflow.com/questions/1980832/java-how-to-scale-threads-according-to-cpu-cores – home
あなたも固定しないと意味がありませんコア/ HTでも、あなたのスレッドが現代のマルチタスクOSで一人ではないことを知っておく必要があります。ほとんどの場合、オペレーティングシステムのスケジューラが何を実行するかを決めるほうがはるかに優れています。システムの他のスレッドが何をしているのかを知る方法がなく、あなたのスレッドの1つをコアに固定することができれば、パフォーマンスが低下する危険性がありますが、それはかなりうまくいくでしょう。 – Fredrik
@Fredrik - CPU集約的なタスク(これはマシン上で唯一または最も一般的なものと仮定します)では、一般にCPUよりも多くのスレッドを実行する必要はありません。しかし、あなたはそれらのすべてを使用していないので、CPUの数を減らしたいとは思わない。 nCPUIntensiveThreads == nProcessorsは実際にかなり公平なターゲットです。 – James