Написание функциональных программ на нефункциональных языках - PullRequest
4 голосов
/ 11 мая 2009

Предположим, я пишу программу, использующую неизменяемые структуры данных на Java. Даже если это не функциональный язык, он должен работать параллельно. Как мне убедиться, что моя программа выполняется с использованием всех ядер моего процессора? Как компьютер решает, какой код может выполняться параллельно?

P.S. Я хотел задать этот вопрос не для того, чтобы выяснить, как распараллелить Java-программы. Но чтобы знать - как компьютер распараллеливает код. Может ли это сделать это в функциональной программе, написанной на не функциональном языке?

Ответы [ 5 ]

8 голосов
/ 11 мая 2009

Java-программы распараллеливаются через потоки. Компьютер не может волшебным образом понять, как распределить части вашего приложения по всем ядрам на императивном языке, таком как Java. Только функциональный язык, такой как Erlang или Haskell, может сделать это. Читайте о потоках Java.

5 голосов
/ 11 мая 2009

Мне не известно о автоматическом распараллеливании JVM. Они существуют для других языков, таких как FORTRAN.

Вы можете найти интересную среду JSR166y fork-join , запланированную для JDK7.

3 голосов
/ 11 мая 2009

Я не думаю, что вы можете "заставить" JVM распараллелить вашу программу, но наличие отдельного потока, выполняющего каждую "задачу", если вы можете таким образом разбить вашу программу, возможно, сработает? однако параллелизм все еще не гарантирован.

1 голос
/ 13 мая 2009

Вы можете писать функции с автоматически распараллеливающими задачами, это довольно легко сделать для конкретных случаев, однако я не знаю ни одного встроенного Java API, который бы делал это. (За исключением, возможно, Executor / ExecutorService)

0 голосов
/ 13 мая 2009

То, что я использовал в школе, и сделало для вас большую работу.

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

Имеет возможность выполнять SMP или параллелизм на основе сообщений.

Является ли это полезным для вас - это другой вопрос :-)

...