Hallo zusammen, habe ein Programm mit Java geschrieben. 2 Threads machen darin ziemlich genau jeweils 50% der Arbeit. Dass heißt bei einem Dual Core Rechner würde ich erwarten, dass beide Prozessoren zwischenzeitlich zu 100% ausgelastet sind. Ist aber nicht so. Entweder ist einer zu 100% ausgelastet und der andere garnicht, oder beide 50%. Insgesamt nutz ich also immer genau 50% der Gesamt-CPU-Leistung. Da es mir darum geht, die arbeit schnellstmöglich abzuarbeiten möchte ich aber möglichst 100% Auslastung.
Hat jemand ne Idee, wo das Problem ist. Scheint so, als ob Java da irgendwie limitiert.
Kann beiden hier nur zustimmen. Es wäre nur möglich eine korrekte Antwort zu geben, wenn wir einen Beispielcode hätten, da es ja viele Möglichkeiten gibt Threads aufzurufen und zu parameteresieren.
Wie sollte denn eine Antwort auf so eine Frage ausschauen? Ohne Code kann das Problem nicht ansatzweise eruiert werden. Sollte es an Java liegen (was ich nicht vermute, denn das ist Aufgabe des OS) wäre dies im anderen Thema erwähnt worden.
Und vielleicht liegt es ja auch gar nicht an den Threads. Es könnte ja durch aus auch sein dass das IO System nicht mit den Daten hinterher kommt.
Ich hatte auch schon solche Sachen (.NET). Mehrer Threads, aber die CPUs fast nicht ausgelastet. Bis ich merkte das die Festplatten zu langsam waren oder das Netzwerk oder der SQL Server ... Je nach Aufgabenstellung muss man den Fehler wo anders suchen. Aber ohne Code?!
In meinem Falle war Zugriff auf 40-60mb große Logfiles mit mehreren Threads langsamer als nur ein gleichzeitiger Zugriff auf ein Logfile. Bei Kollegen mit deutlich besserer Hardware (auch besserer Festplatte), war der Effekt genau andersrum, hier konnte man mit dem parallelen Zugriff massiven Performancegewinn feststellen.