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 に答える