5

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

PS我问这个问题的目的不是找出如何并行化Java程序。但要知道 - 计算机如何并行化代码。它可以在用非功能语言编写的功能程序中完成吗?

4

5 回答 5

8

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

于 2009-05-11T09:58:19.987 回答
5

我不知道自动并行化JVM。它们确实存在于其他语言,例如 FORTRAN。

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

于 2009-05-11T11:47:36.273 回答
3

我不认为你可以“强制”JVM并行化你的程序,但是有一个单独的线程执行每个“任务”,如果你可以这样分解你的程序,在大多数情况下可能会成功吗?但是,仍然不能保证并行性。

于 2009-05-11T12:25:41.957 回答
1

您可以编写具有自动并行化任务的函数,在特定情况下这很容易做到,但是我不知道有任何内置的 Java API 可以做到这一点。(可能除了 Executor/ExecutorService)

于 2009-05-13T06:19:10.370 回答
0

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

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

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

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

于 2009-05-13T06:26:23.340 回答