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

8

Ich habe mich nur gefragt, ob wir den Muti-Threading-Algorithmus tatsächlich benötigen, wenn er die Multi-Core-Prozessoren verwenden muss oder ob der jvm mehrere Core-Heaps verwenden wird - obwohl unser Algorithmus sequenziell ist?

UPDATE:

Verwandte Frage:

Emil 01.10.2010, 06:17
quelle

4 Antworten

16

Ich glaube nicht, dass aktuelle JVM-Produktionsimplementierungen automatisches Multi-Threading durchführen. Sie können andere Kerne für die Garbage-Collection und andere Housekeeping verwenden, aber wenn Ihr Code sequentiell ausgedrückt wird, ist es schwierig, ihn automatisch zu parallelisieren und trotzdem die genaue Semantik beizubehalten.

Da können einige experimentelle / Forschungs-JVMs sein, die versuchen, Codebereiche zu parallelisieren, die der JIT als peinlich parallel erkennen kann, aber ich habe nichts dergleichen für Produktionssysteme gehört. Selbst wenn das JIT diese Art von Ding entdecken würde, wäre es wahrscheinlich weniger effektiv als Entwerfen Ihren Code für die Parallelität an erster Stelle. (Wenn Sie den Code sequenziell schreiben, könnten Sie leicht Designentscheidungen treffen, die die automatische Parallelität unbeabsichtigt behindern würden.)

    
Jon Skeet 01.10.2010, 06:20
quelle
4

Ihre Implementierung muss multi-threaded sein, um die Vorteile der mehreren Kerne nutzen zu können.

Ihr System als Ganzes kann einen einzelnen Kern pro laufender Anwendung oder Dienst verwenden. Jede laufende Anwendung arbeitet jedoch nur dann mit einem einzelnen Thread / Kern, wenn sie nicht anderweitig implementiert wird.

    
Babak Naffas 01.10.2010 06:28
quelle
1

Java teilt Ihr Programm nicht automatisch in Threads auf. Wenn Sie möchten, dass Code gleichzeitig auf mehreren Kernen ausgeführt werden kann, müssen Sie dem Computer über Threads oder einen anderen Mechanismus mitteilen, wie der Code in Aufgaben aufgeteilt wird und welche Abhängigkeiten zwischen den Aufgaben in Ihrem Programm bestehen. Andere Tasks können jedoch gleichzeitig auf den anderen Prozessorkernen ausgeführt werden, sodass Ihr Programm auf einem Multicore-Prozessor möglicherweise noch schneller ausgeführt wird, wenn Sie gleichzeitig andere Vorgänge ausführen.

Eine einfache Möglichkeit, Ihren aktuellen Code parallellierbar zu machen, ist JOMP Parallele for-Schleifen und Verarbeitungsleistung intensivieren, leicht parellierte Teile Ihres Codes.

    
Statler 01.10.2010 06:36
quelle
1

Ich glaube nicht, dass Multi-Threaded-Algorithmen Multi-Core-Prozessoren effektiv nutzen werden, wenn sie nicht für die Effektivität codiert sind. Hier ist ein schöner Artikel, in dem es darum geht, Multi-Core-Prozessoren für Entwickler einzusetzen -

Ссылка

    
Sachin Shanbhag 01.10.2010 06:21
quelle

Tags und Links