假设我在Java中使用不可变数据结构编写程序。即使它不是一种功能语言,它也应该能够并行执行。如何确保使用处理器的所有内核执行程序?计算机如何决定可以并行运行哪些代码?
P.S。我提出这个问题的意图不是要找出如何并行化java程序。但要知道 - 计算机如何并行化代码。它可以在用非函数式语言编写的函数式程序中完成吗?
答案 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)