Java: Anzahl logischer CPUs bestimmen

Gast #1295051
Lesenswert?

> 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 #1295363
Lesenswert?

>> 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 #1296079
Lesenswert?

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 #1296083
Lesenswert?

@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 #1296557
Lesenswert?

> 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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren