Java: Anzahl logischer CPUs bestimmen

Gast
> Ich möchte je nach System die optimale Anzahl
> an Threads starten.
Das kann man aber pauschal nicht sagen, das die Anzahl der Thread der 
anzahl der CPUs das optimum ergibt.

Beispiel 1: 4CPUs und jeder Thread soll eine Datei auf der Festplatte 
kopieren - bei 4Thread bist du am ende Langsamer als wenn du nur 1Thread 
nimmt. Die Festplatte arbeitet nicht opitmal wenn mehere gleichzeitige 
zugriffe laufen.
(normale Festplatte, kein Raid, keine SSHD, keine Ramdisk)

Beispiel 2: 1 CPU und 1Thread der Daten aus einer Datenbank abruft. Das 
system langweilt sich vermutlich weil die Datenbank inc. Netzwerk nicht 
hinterherkommt. Da muss man also mehr Thread starten.
Gast
Kann man denn davon ausgehen, dass Java die verschiedenen Threads auch 
tatsächlich auf verschiedene Prozessoren verteilt? Zumal Java-Threads ja 
keine echten Prozesse sind.
Gast
>> Zumal Java-Threads ja keine echten Prozesse sind.

Threads gehören zum Prozess. Andernfalls kann man ja selbst Einfluss 
nehmen. Die Lastverteilung funktioniert ganz gut, das haben sie 
einigermassen hingekriegt. Du kannst dir ja die Java Sources anschauen 
ggf. für deine Zwecke anpassen. Wenns perfekt werden soll...
Persönliche Seite
Frage schrieb:
> Danke für euere  Antworten. Speziell in meinem Fall (Bilder berechnen)
> ist es das Optimum. ;)
Also meiner Ansichtnach irrst du da.
Die VM KANN das auf zwei Prozessoren verteilen... muß es aber nicht 
vieleicht nuzt ein anderes Programm kontinuierlich die andere CPU.
Solche Optimierungen bringen nix, du solltest einfach soviele Threads 
starten wie du brauchst.
Wenn du Glück hast laufen sie parralel, wenn nicht muß die Arbeit 
trozdem getan werden dann bringt es auch nichts zu warten bis die erste 
Operation fertig ist (Ausnahme natürlich wie schon angeprochen I/O auf 
Geräte die keinen wahlfreien Zugriff erlauben oder dieser sehr 'teuer' 
ist)
Gast
@Läubi ..
dem kann ich nicht zustimmen.

Es macht überhaupt kein sinn wenn 100 Bilder zu verarbeiten sind, dann 
100Threads zu starten weil einfach dann nichts mehr auf dem System geht. 
Wenn aber 2CPUs vorhanden sind dann macht es schon Sinn 2Thread zu 
starten. Selbst wenn etwas anderes noch läuft ist es es guter 
Kompromiss.

Man könnte aber auch dem Nutzer die wahl nach der anzahl der Thread 
lassen aber als Default ist in diesem fall die anzahl der cpus schon ok
Gast
> Man könnte aber auch dem Nutzer die wahl nach der anzahl der Thread
> lassen aber als Default ist in diesem fall die anzahl der cpus schon ok

Jo, genau das hatte ich auch vor. :)

Jedenfalls rendert mein P4 Einkerner schneller, wenn ich zwei Threads 
starte, da das Hyperthreading der CPU dann ausgenutzt wird.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.