11 Stimmen

Ist ein Multi-Threaded-Algorithmus erforderlich, um Multi-Core-Prozessoren zu nutzen?

Ich frage mich nur, ob wir tatsächlich den Algorithmus benötigen, um muti-threaded zu sein, wenn es die Multi-Core-Prozessoren nutzen muss, oder wird der JVM mehrere Kerne nutzen, obwohl unser Algorithmus sequentiell ist?

UPDATE:

Verwandte Frage:

20voto

Jon Skeet Punkte 1325502

Ich glaube nicht, dass die aktuellen JVM-Implementierungen automatisches Multithreading betreiben. Sie verwenden vielleicht andere Kerne für die Garbage Collection und andere Aufgaben, aber wenn Ihr Code sequentiell ausgedrückt wird, ist es schwierig, ihn automatisch zu parallelisieren und dabei die präzise Semantik beizubehalten.

Dort mai Es gibt zwar einige experimentelle/Forschungs-JVMs, die versuchen, Codebereiche zu parallelisieren, die das JIT als peinlich parallel erkennen kann, aber ich habe noch nie von so etwas für Produktionssysteme gehört. Selbst wenn das JIT hat auf diese Art von Dingen aufmerksam zu machen, wäre es wahrscheinlich weniger effektiv als Gestaltung Ihr Code muss von vornherein auf Parallelität ausgelegt sein. (Wenn Sie den Code sequentiell schreiben, könnten Sie leicht Designentscheidungen treffen, die die automatische Parallelität ungewollt behindern).

5voto

Babak Naffas Punkte 11938

Ihre Implementierung muss Multi-Thread-fähig sein, um die Vorteile der mehreren Kerne, die Ihnen zur Verfügung stehen, nutzen zu können.

Ihr System als Ganzes kann einen einzigen Kern pro laufender Anwendung oder Dienst verwenden. Jede laufende Anwendung arbeitet jedoch mit einem einzigen Thread/Kern, sofern nicht anders implementiert.

2voto

Statler Punkte 304

Java wird Ihr Programm nicht automatisch in Threads aufteilen. Wenn Sie möchten, dass Ihr Code auf mehreren Kernen gleichzeitig ausgeführt werden kann, müssen Sie dem Computer über Threads oder einen anderen Mechanismus mitteilen, wie der Code in Tasks und die Abhängigkeiten zwischen den Tasks in Ihrem Programm aufgeteilt werden sollen. Andere Aufgaben können jedoch gleichzeitig auf den anderen Kernen ausgeführt werden, so dass Ihr Programm auf einem Mehrkernprozessor möglicherweise trotzdem schneller läuft, wenn Sie andere Dinge gleichzeitig ausführen.

Eine einfache Möglichkeit, Ihren aktuellen Code parametrisierbar zu machen, ist die Verwendung von JOMP zur Parallelisierung von for-Schleifen und zur Steigerung der Verarbeitungsleistung, leicht parellisierte Teile Ihres Codes.

1voto

Sachin Shanbhag Punkte 52789

Ich glaube nicht, dass die Verwendung von Multi-Thread-Algorithmen Multicore-Prozessoren effektiv nutzen wird, es sei denn, sie sind auf Effektivität programmiert. Hier ist ein schöner Artikel, der über die Nutzung von Multi-Core-Prozessoren für Entwickler spricht -

http://java.dzone.com/news/building-multi-core-ready-java

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X