Threads Trotz Threads wird nur 1 Prozessorkern ausgelastet

Pascal97

Mitglied
Hallo,
ich habe neulich angefangen ein Programm zu schreiben, welches Fraktale zeichnet. Momentan habe ich mich nur mit der Mandelbrotmenge beschäftigt und wie sich schon früh herausstellte braucht mein Programm relativ lange das Fraktal zu berechnen. Also habe ich die Rechenarbeit auf mehrere Threads aufgeteilt, sodass nun von einem Thread nur ein kleiner Teil meines Frames berechnet wird. Das funktioniert auch alles ganz gut, nur leider wird werden die Threads nicht auf verschiedene Kerne meines Prozessors ausgelagert, weshalb mein Programm immer noch genau so langsam ist wie vorher... (Der Task-Manager zeigt an, dass nur der 1. Kern mit fast 100% ausgelastet ist, die anderen nicht)
Gibt es da vielleicht Probleme, weil mehrere Threads auf einen Frame zeichnen wollen bzw. muss ich eine andere Art Thread benutzen, wenn ich sie für solche GUI-Sachen anwenden möchte?

Die Main-Klasse:

Java:
package Fractals;

public class Main {

	private static double sw = 1000.0;
	private static double sh = 1000.0;
	private static double squares = 27.0;

	public static void main(String[] args) {

		Frame frame = new Frame((int)(sw+16),(int)(sh+38));
		for(int i = 0; i<squares; i++){
			for(int j = 0; j<squares; j++){
				MandelbrotThread mbt = new MandelbrotThread(sw/squares,sh/squares,frame,(double)i,(double)j,squares);
				Thread x = new Thread(mbt);
				x.start();
			}
		}
	}

}

Die Thread-Klasse mit der run-Mehtode:

Java:
package Fractals;

public class MandelbrotThread extends Thread {

	private double sw;
	private double sh;
	private double startX;
	private double startY;
	private double idX;
	private double idY;
	private double squares;
	private Frame frame;

	public MandelbrotThread(double screenwidth, double screenheight, Frame f, double i, double j, double s){
		sw = screenwidth;
		sh = screenheight;
		frame = f;
		idX = i;
		idY = j;
		squares = s;
		startX = i*sw;
		startY = (squares-1-j)*sh;
	}

	public void run( ) {

		Paint paint = new Paint(sw,sh,idX,idY,squares);
		paint.setBounds((int)startX,(int)startY,(int)(sw),(int)(sh));
		paint.setVisible(true);
		frame.add(paint);
		frame.addMouseListener(new ML(paint,frame));	
		frame.addMouseMotionListener(new ML(paint,frame));
	}
}
 

Anhänge

  • Mandelbrot.jar
    16,2 KB · Aufrufe: 2

Thallius

Top Contributor
Kann es sein, dass gar nicht das Berechnen das langsame ist sondern das Zeichnen?

Lass es doch einmal berechnen ohne Zeichnen zu lassen und schau was dann passiert.

Gruß

Claus
 

Pascal97

Mitglied
Hallo Claus,

ich hab das mal ausprobiert und leider lässt sich dann bei keinem Kern mehr eine hohe Auslastung erkennen, was bedeute das wirklich der Zeichenprozess so lange dauert. Allerdings ist es eigentlich ja irrelevant, ob das Zeichen oder das Rechnen die meiste Zeit beansprucht, denn so oder so sollte jeder Thread seinen Teil rechen/zeichnen und das sollte auf die Kerne verteilt werden...

Gruß,

Pascal
 

Thallius

Top Contributor
Nein das kannst du so nicht sehen. Das Sheduling der Kerne ist ein sehr komplexer Prozess und kann nicht einfach in 2 Threads gleich 2 Kerne gemünzt werden. Das OS bestimmt wann ein zweiter Kern eingesetzt wird und wenn ein Thread nur ein paar Millisekunden braucht, dann wird für den nächsten kein weiterer Kern angeworfen. Denn das switching zwischen den Kernen verbraucht auch eine nicht zu verachtende Menge an Ressourcen.

Gruß

Claus
 

coco07

Bekanntes Mitglied
Also mal abgesehen davon, dass du auch bei einem Mehrkernprozessor nicht davon ausgehen solltest, dass die Threads wirklicht parallel laufen, solltest du mal darüber nachdenken, ob nicht dein Code schuld ist.
Und da ich deinen Kenntnissstand zu dem Thema Threads nicht kenne, bist du dir sicher, dass du, weil du von mehreren Thread redest, wirklich soviele Thread benötigst? Arbeiten deine Threads auf den gleichen Daten? Hast du Deadlocks, verlorende Aktualisierungen und Wettlaufsituationen ausgeschlossen?
Diese Dinge können zu einem gewaltigem Overhead führen.

Grüße coco07!
 

Pascal97

Mitglied
Ich habe das Problem jetzt gelöst:
Erst die Threads rechnen lassen, dann zeichnen :)
Meine Kerne werden nun zu fast 100% ausgelastet und es funktioniert alles.
Leider wurde mein Programm nur minimal schneller als zuvor, was mich etwas verwundert, jetzt wo doch weitaus mehr Rechenleistung zur Verfügung steht....

Grüße,

Pascal
 

Thallius

Top Contributor
Naja weil das Zeichnen halt immer noch das langsame an der Sache ist. Hier würde ich versuchen zu optimieren und nicht bei dem bischen Rechnen.

Zeichne z.B. im einen ImageBuffer und zeige das Ergebnis erst dann an wenn es fertig ist. Ich wette dann ist es viel schneller.

Gruß

Claus
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
U Breite von Textfeldern trotz Layoutmanager Java Basics - Anfänger-Themen 4
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
tun3d Packet trotz richtiger Addressierung nicht auffindbar? Java Basics - Anfänger-Themen 10
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
Kotelettklopfer Output korrekt trotz falschem Lösungsweg !? Java Basics - Anfänger-Themen 99
P NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap trotz vorhandener Klasse? Java Basics - Anfänger-Themen 10
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J bundel - Datei wird nicht gefunden. Trotz STRG-SHIFT-J Java Basics - Anfänger-Themen 2
U UnsupportedClassVersionError trotz neuster JRE und JDK Version Java Basics - Anfänger-Themen 7
J Unterschiedliche Ordnerstrukturen trotz gleicher Entwicklungsumgebungen Java Basics - Anfänger-Themen 3
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
L Methoden if Bedingung trotz Erfüllung, nicht angesprochen Java Basics - Anfänger-Themen 12
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
C Threads SwingWorker läuft trotz cancel weiter Java Basics - Anfänger-Themen 22
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
D javac kann trotz PATH-Eintrag nicht gefunden werden (Hello World) Java Basics - Anfänger-Themen 10
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
X Array trotz Befüllung "null" Java Basics - Anfänger-Themen 11
M Arrayfelder werden trotz Beschränkung unbeschrenkt ausgegeben Java Basics - Anfänger-Themen 2
Fab1 alte Java Datei wird ausgeführt (trotz Änderung) Java Basics - Anfänger-Themen 4
O Downloaden: Trotz If Abfrage wird Datei heruntergeladen Java Basics - Anfänger-Themen 2
M Datentypbewahrung trotz Erbung Java Basics - Anfänger-Themen 12
L Applet : keine Recht für Zugriff auf Clipboard (trotz Zertifikat) Java Basics - Anfänger-Themen 4
N Input/Output EOF-Exception trotz Fehlerüberprüfung Java Basics - Anfänger-Themen 2
U Übersicht trotz mehrdimensionaler Arraylisten Java Basics - Anfänger-Themen 17
S Java Heap space trotz -Xmx1024 Java Basics - Anfänger-Themen 10
J trotz Error weitermachen Java Basics - Anfänger-Themen 4
V Kein neuer Thread trotz Runnable Java Basics - Anfänger-Themen 4
X JFrame als JAR unsichtbar trotz Exception Handling Java Basics - Anfänger-Themen 5
Y Trotz add wird Image in GradBagLayout nicht angezeigt Java Basics - Anfänger-Themen 5
L Polymorphie <identifier> expected trotz "Angabe" Java Basics - Anfänger-Themen 2
O ausgabe spinnt trotz erfolgreichem kompilieren Java Basics - Anfänger-Themen 2
D Jar klappt nicht trotz main Methode Java Basics - Anfänger-Themen 19
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
D OpenCSV Fehllender Konstruktor trotz import und Buildpath Eintrag Java Basics - Anfänger-Themen 1
X dll löschen trotz zugriff durch java programm Java Basics - Anfänger-Themen 5
U if-Anweisung trotz Division/0 Java Basics - Anfänger-Themen 6
K BufferedReader/Writer trotz Cache? Java Basics - Anfänger-Themen 9
D Ein boolean[] Array größer als 63.000.000 erstellen? trotz -Xms und -Xmx.... Java Basics - Anfänger-Themen 7
Q Listen - DefaultListModel trotz Design ueber GUI? Java Basics - Anfänger-Themen 10
A Trotz Thread ist Program nicht erreichbar Java Basics - Anfänger-Themen 3
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
D nicht genug speicher - profiling trotz error Java Basics - Anfänger-Themen 5
D Buttons gehen trotz enebled(false) Java Basics - Anfänger-Themen 8
J Spielfigur wird trotz erfolgreich aufgerufener Methode nicht Java Basics - Anfänger-Themen 22
H javac Befehl trotz Variablen einbindung ned gefunden Java Basics - Anfänger-Themen 23
C Trotz "synchronized" unerwartete Ausgabe Java Basics - Anfänger-Themen 2
K Midi stoppt trotz stop button nicht Java Basics - Anfänger-Themen 3
R windowclosing - fenster schließt immer trotz abfrage Java Basics - Anfänger-Themen 2
C Thread läuft und läuft, trotz interrupt() Java Basics - Anfänger-Themen 9
T laagen trotz Double-Buffering Java Basics - Anfänger-Themen 5
S ClassNotFoundException trotz JAR Einbindung in Eclipse Java Basics - Anfänger-Themen 2
T tooltip trotz gedrückter maustaste Java Basics - Anfänger-Themen 2
0 NoSuchMethodError: main trotz vorhandener Main Methode? Java Basics - Anfänger-Themen 9
Silver-Blue mehrere Instanzen einer Klasse, trotz Random immer das Selbe Java Basics - Anfänger-Themen 7
X trotz gleicher variablen nicht equal Java Basics - Anfänger-Themen 5
G Trotz Abfrage immer noch Zahlen doppelt Java Basics - Anfänger-Themen 3
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
C Threads und Swing Java Basics - Anfänger-Themen 9
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
B Monitor als Schranke von Threads Java Basics - Anfänger-Themen 20
W Threads Alphabet Java Basics - Anfänger-Themen 20
H Threads Anfänger Java Basics - Anfänger-Themen 17
1 Threads parallel laufen Java Basics - Anfänger-Themen 11
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
M Threads Java Basics - Anfänger-Themen 12
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
M Threads Java Basics - Anfänger-Themen 2
A Threads Java Basics - Anfänger-Themen 9
A Threads Java Basics - Anfänger-Themen 13
A Threads und .join Java Basics - Anfänger-Themen 14
W Threads starten Java Basics - Anfänger-Themen 2
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Wieviele threads? Java Basics - Anfänger-Themen 9
J Problem bei seriellem Start von Threads Java Basics - Anfänger-Themen 11
O Threads Java Basics - Anfänger-Themen 2
L Buchungssystem und Threads Java Basics - Anfänger-Themen 2
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
S Gemeinsame Ressource und Mehrfachinstanziierung von Threads Java Basics - Anfänger-Themen 16
S Verklemmung Threads Java Basics - Anfänger-Themen 11
B Threads 2 Threads gleichzeitig laufen lassen Java Basics - Anfänger-Themen 1
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
M Threads run Methode Java Basics - Anfänger-Themen 4
javajoshi mehrere Threads: Methoden zentral unterbringen Java Basics - Anfänger-Themen 8
javajoshi Problem mit zwei Threads und Arrays (Runnable) Java Basics - Anfänger-Themen 12
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
S Kleine Frage zu Threads Java Basics - Anfänger-Themen 3
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
T Threads Synchronisieren Java Basics - Anfänger-Themen 6
D Frage Threads Java Basics - Anfänger-Themen 6
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben