JavaのマルチコアCPU対応について教えてください。

昨今のクライアントもサーバー機もCPUはマルチコアになっています。CやC++等ではIntelのマルチコアコンパイラがあって、マルチコア用のコーディングをしなければいけないようです。翻って、Javaはどうなのでしょうか?Javaコードをコンパイルしてもバイトコードになるだけですから、問題はJava VM側になるような気がするのですが。まずここまでは、あってるでしょうか?
そして、今のJava VMはマルチコア対応してるのでしょうか?また、マルチコア用のプログラミングテクニックというのは有るのでしょうか?初心者の質問ですが、よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:2009/03/05 13:16:01
  • 終了:2009/03/07 00:05:46

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/03/05 13:36:29

ポイント60pt

問題はJava VM側になるような気がするのですが。まずここまでは、あってるでしょうか?

合っています。


今のJava VMはマルチコア対応してるのでしょうか?

しています。ただし、パフォーマンスには改善の余地があるといわれています。(「マルチコア・プロセッサの普及で激変するアプリケーション開発の現場」参照)


マルチコア用のプログラミングテクニックというのは有るのでしょうか?

あります。

マルチスレッドで設計するのが定石です。

Javaでのコーディングにおいては、Threadインスタンスを利用するのが手っ取り早い方法です。


スレッドというのはプログラムの実行単位の考え方で、これ単独である程度の機能を発揮する関数/サブルーチン/クラスの固まりだととらえてください。他のスレッドと情報をやり取りするためのインターフェースが必要です。

(実際にはそれほど単純ではないのですが、)プログラム実行時にはスレッド1つに対してCPUのコアが1つ割り当てられると考えてください。たとえば、スレッドAとスレッドBが互いに情報連携する必要なく動くことができれば、デュアルコアCPUの能力を発揮できることになります。

実際の設計では、スレッドAとBは、どこかの時点でインターフェースをとることになるので、その時点で処理が遅い方に引きずられ、他方のコアが「待ち」に入ってしまいます。

この「待ち」をいかに少なくするかが、マルチスレッド設計の肝になります。

id:inajyun

レスありがとうございます。Threadなら分かります。コーディングする時はThreadを使って、マルチコアに分散されるんですね。なるほど、インターフェイスでの待ちをどれだけすくなるするかがコーディングのポイントなんですね。

2009/03/05 14:58:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません