4

Angenommen, ich schreibe ein Programm mit unveränderlichen Datenstrukturen in Java. Obwohl es keine funktionale Sprache ist, sollte es parallel ausgeführt werden können. Wie stelle ich sicher, dass mein Programm mit allen Kernen meines Prozessors ausgeführt wird? Wie entscheidet der Computer, welcher Code parallel ausgeführt werden kann?Funktionale Programme in nicht-funktionale Sprachen schreiben

P.S. Meine Absicht, diese Frage zu stellen, war nicht herauszufinden, wie man Java-Programme parallelliert. Aber zu wissen - wie parallelisiert der Computer den Code? Kann es das in einem funktionalen Programm tun, das in einer nicht funktionalen Sprache geschrieben ist?

Antwort

3

Ich glaube nicht, dass Sie die JVM "zwingen" können, Ihr Programm zu parallelisieren, aber einen separaten Thread ausführen jede "Aufgabe", wenn Sie Ihr Programm auf diese Weise brechen können, würde wahrscheinlich den Trick in den meisten Fällen tun? Parallelität ist jedoch noch nicht gewährleistet.

8

Java-Programme werden über Threads parallelisiert. Der Computer kann nicht auf magische Weise herausfinden, wie die Teile Ihrer Anwendung über alle Kerne in einer imperativen Sprache wie Java verteilt werden. Nur eine funktionale Sprache wie Erlang oder Haskell könnte das tun. Lesen Sie Java-Threads nach.

+2

Ich sehe nicht, warum, dass die „reine Funktions“ Sprachen bewahren soll. –

+0

Sie haben Recht, ich weiß nicht, warum ich das dort hingelegt habe ... –

+1

Ein Programm, das unveränderliche Strukturen in Erlang oder Haskell verwendet, kann auch nicht auf magische Weise parallelisiert werden. Die Parallelisierungswerkzeuge sind viel einfacher zu verwenden, aber Sie müssen sie immer noch explizit verwenden. –

5

Mir ist automatic parallelization JVMs nicht bekannt. Sie existieren für andere Sprachen wie FORTRAN.

Sie könnten den für JDK7 geplanten JSR166y fork-join framework interessant finden.

+0

Die automatische Parallelisierungsverbindung war nützlich, danke! – Pranav

1

Sie können Funktionen mit automatischen Parallelisierungsaufgaben schreiben, es ist ziemlich einfach für bestimmte Fälle zu tun, mir ist jedoch keine integrierte Java-API bekannt, die dies tut. (Außer vielleicht der Executor/ExecutorService)

0

Etwas, das ich in der Schule verwendete, das viel von der Arbeit für Sie tat.

http://www.cs.rit.edu/~ark/pj.shtml

Es hat die Fähigkeit, SMP oder nachrichtenbasierte Parallelität zu tun.

Unabhängig davon, ob es für Sie nützlich ist, ist eine andere Frage :-)