2010-11-21 5 views
8

Was ist der einfachste Weg in Java, um Multi-Core zu erreichen? Und damit meine ich, speziell darauf hinzuweisen, in welchem ​​Kern einige Teile des Projekts ausgeführt werden, also sind "alte" Java-Threads keine gute Wahl.Multi-Core in Java erreichen - wie?

Bisher wurde ich JConqurr vorgeschlagen (das ist ein Eclipse-Toolkit für Multi-Core-Programmierung in Java), JaMP (die Java für OpenMP erweitert), und MPJ Express, von denen ich nicht viel weiß. Welche der oben genannten Optionen halten Sie für die beste oder haben Sie andere Vorschläge? Es wäre vorzuziehen, irgendwie die Leistungsverstärkung zu messen, aber nicht exklusiv.

Jede Hilfe würde sehr geschätzt werden. Danke, twentynine.

+5

Wird diese Terminologie ("multi-core") überall verwendet? Ich würde diese Frage ändern in "Laufthreads auf bestimmten Kernen in Java" – ripper234

+2

Ich glaube, der Begriff ist "Prozessoraffinität", die für Kerne sowie Prozessoren gilt. – ide

+0

Warum genau müssen Sie die Prozessoraffinität für die Threads festlegen können? Warum sollte die JVM diese Entscheidungen nicht treffen? – Darien

Antwort

0

Scala ist ziemlich beliebt dafür. Es läuft auf der JVM und hat Bindings für Java, um sie miteinander zu verbinden.

+0

Die Sache ist, ich muss Java verwenden. Keine anderen Sprachen sind erlaubt. – twentynine

2

Obwohl es einfach ist, Multithreading-Code in Java zu schreiben, gibt es in der Java-Standardlaufzeitumgebung nichts, was es Ihnen erlaubt, der JVM oder dem Betriebssystem mitzuteilen, wie Sie Ihr Programm einplanen.

Daher benötigen Sie Code speziell für Ihre JVM und/oder Ihr Betriebssystem, und dieser Code ist möglicherweise in Java nicht möglich (es sei denn, Sie tauchen in JNI oder JNA). Externe Programme können Prozesse in vielen Unix-Versionen (und wahrscheinlich auch Windows) an eine CPU anpinnen, aber ich denke nicht, dass Sie dies für einzelne Threads tun können.

+0

Ja, Java ist "zu plattformübergreifend", um das zu unterstützen ... – khachik

+0

@khachik, ich glaube nicht, dass das der Grund dafür ist. Sehen Sie sich die Desktop-Integrationsfunktionen an, die mit Java 6 angekommen sind. Grundsätzlich haben die Designer von Java absichtlich ein _lot_ von Implementierungsdetails aus dem laufenden Programm ausgeblendet. Dies ermöglicht den JVMs, auf noch nicht vorgesehene Weise zu optimieren, wenn sie auftritt. –