用非函数语言编写功能程序

时间:2009-05-11 09:53:12

标签: java functional-programming multicore imperative-languages

假设我在Java中使用不可变数据结构编写程序。即使它不是一种功能语言,它也应该能够并行执行。如何确保使用处理器的所有内核执行程序?计算机如何决定可以并行运行哪些代码?

P.S。我提出这个问题的意图不是要找出如何并行化java程序。但要知道 - 计算机如何并行化代码。它可以在用非函数式语言编写的函数式程序中完成吗?

5 个答案:

答案 0 :(得分:8)

Java程序通过线程并行化。计算机无法神奇地弄清楚如何使用Java等命令式语言在所有核心上分发应用程序的各个部分。只有像Erlang或Haskell这样的函数式语言才能做到这一点。阅读Java线程。

答案 1 :(得分:5)

我不知道automatic parallelization JVM。它们确实存在于其他语言中,例如FORTRAN。

您可能会发现为JDK7安排的JSR166y fork-join framework很有趣。

答案 2 :(得分:3)

我不认为你可以“强制”JVM来并行化你的程序,但是如果你能以这种方式分解你的程序,那么让一个单独的线程执行每个“任务”,在大多数情况下可能会做到这一点?然而,并行性仍然无法保证。

答案 3 :(得分:1)

您可以使用自动并行化任务编写函数,对于特定情况,这很容易做到,但是我不知道有任何内置的Java API可以执行此操作。 (可能是Executor / ExecutorService除外)

答案 4 :(得分:0)

我在学校里用过的东西,为你做了很多工作。

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

它具有执行SMP或基于消息的并行性的能力。

它是否对你有用是一个不同的问题:-)