Dualcore mal ein bischen belasten

Status
Nicht offen für weitere Antworten.
C

Christian76

Gast
Hallo,

ich habe einen Thread mit einem Rechenalgorithmus am laufen und würde diesen gern beschleunigen.
Versuche dies mit der Methode setPriority(Thread.MAX_PRIORITY);. Dies lastet den Dualcore aber nicht
mehr aus. Hier mal ein Beispielcode:


Code:
.
.
.
Thread objBerechnung = new Berechnung();
objBerechnung.start();
objBerechnung.setPriority(Thread.MAX_PRIORITY);
.
.
.

class Berechnung extends Thread
{
           
        Berechnung()
        {
                 while (! isInterrupted())
                 {
                        while(true)
                            int i = 1000*1000;
                 }
        }
}

Gruß
-Christian
 
C

Christian76

Gast
genau 50 %.

Unabhängig davon ob die Thread Priority min oder max ist.
 

byte

Top Contributor
Der Scheduler des OS ist für die Auslastung zuständig. AFAIK kannste darauf keinen Einfluss nehmen.
 

Murray

Top Contributor
Ein Thread wird immer nur auf einem Kern laufen. Wenn du beide Kerne auslasten willst, dann brauchst du mindestens zwei Threads. Die Priorität ist nur relevant, wenn mehrere Threads um die CPU konkurrieren; das ist in deinem Fall aber nicht so.
 
C

Christian76

Gast
sorry, galt nicht dir, sollte eigentlich als Antwort an SlaterB fungieren. Danke für deinen Hinweis. Gibt es irgendeine Möglichkeit die Berechnung des Threads auf mehrere Rechnerkerne zu übertragen?
 
C

Christian76

Gast
@ Hobbit

Mahlzeit erst mal, klar mag ich Threads! :)

Und ich wette du kannst dir auch denken was ich in dem Thread berechne! :lol:
 
S

SlaterB

Gast
ja, und die nennt sich: mehrere Threads aufmachen ;)

ein Rechenkern ist doch ein abgeschlossenes Konstrukt,
Befehlszähler, Register, Cache und was man so kennt,

zwei CPUs sind ja eher zwei Rechner als einer,
elementaren Maschinencode kann man da nicht verteilen
 

Murray

Top Contributor
Christian76 hat gesagt.:
Gibt es irgendeine Möglichkeit die Berechnung des Threads auf mehrere Rechnerkerne zu übertragen?
Dazu müsste man mehrere Threads starten. Und dazu müsste man wiederum die Berechnung in parallelisierbare Teilaufgaben zerlegen, was bei der (ziemlich sinnlosen) Berechnung im Beispiel wohl kaum möglich ist.

Du könntest aber spaßeshalber folgendes machen:
Code:
Thread objBerechnung1 = new Berechnung();
objBerechnung1.start();

Thread objBerechnung2 = new Berechnung();
objBerechnung2.start();

Oder sogar
Code:
for ( int i=0; i<100; i++) new Berechnung().start();


Damit dürftest du deine CPU hinreichend belasten.
 

Murray

Top Contributor
Ach ja, damit dass funktioniert,sollte die Thread-Klase noch repariert werden:
Code:
class Berechnung extends Thread
{
         
        @Override  
        public void run()
        {
                 while (! isInterrupted())
                 {
                        while(true)
                            int i = 1000*1000;
                 }
        }
}

Ansonsten startet die Endlosschleife ja bereits im Konstruktor und blockiert den aufrufenden Thread.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben