mikrocontroller.net

Forum: PC-Programmierung Java: Anzahl logischer CPUs bestimmen


Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Windows kennt ja die Anzahl der logischen CPUs. Wird diese Information 
auch an Java übermittelt? Ich möchte je nach System die optimale Anzahl 
an Threads starten.

Autor: Christian O. (easter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int cpu = (int) (Runtime.getRuntime().availableProcessors());

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für euere  Antworten. Speziell in meinem Fall (Bilder berechnen) 
ist es das Optimum. ;)

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das klappt sehr gut.

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Prozess (z.B. Java VM) kann durchaus aus mehreren parallel laufenden 
Threads bestehen.

Autor: Linus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter
Ja okay, das war etwas allgemein gesagt. Wollte nur sagen das nicht man 
sich nicht zuviel davon versprechen sollte. Man sollte natürlich immer 
wissen was man tut, wobei 100 Threads auch noch nicht so die große 
Herausforderung für die VM darstellt ;)

Autor: Frage (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.