假设我使用 Java 中的不可变数据结构编写了一个程序。即使它不是函数式语言,它也应该能够并行执行。如何确保我的程序正在使用我的处理器的所有内核执行?计算机如何决定哪些代码可以并行运行?
PS我问这个问题的目的不是找出如何并行化Java程序。但要知道 - 计算机如何并行化代码。它可以在用非功能语言编写的功能程序中完成吗?
假设我使用 Java 中的不可变数据结构编写了一个程序。即使它不是函数式语言,它也应该能够并行执行。如何确保我的程序正在使用我的处理器的所有内核执行?计算机如何决定哪些代码可以并行运行?
PS我问这个问题的目的不是找出如何并行化Java程序。但要知道 - 计算机如何并行化代码。它可以在用非功能语言编写的功能程序中完成吗?
Java 程序通过线程并行化。计算机无法神奇地弄清楚如何以 Java 等命令式语言将应用程序的各个部分分布到所有内核中。只有像 Erlang 或 Haskell 这样的函数式语言才能做到这一点。阅读 Java 线程。
我不知道自动并行化JVM。它们确实存在于其他语言,例如 FORTRAN。
您可能会发现为 JDK7 安排的 JSR166y fork-join 框架很有趣。
我不认为你可以“强制”JVM并行化你的程序,但是有一个单独的线程执行每个“任务”,如果你可以这样分解你的程序,在大多数情况下可能会成功吗?但是,仍然不能保证并行性。
您可以编写具有自动并行化任务的函数,在特定情况下这很容易做到,但是我不知道有任何内置的 Java API 可以做到这一点。(可能除了 Executor/ExecutorService)