人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: inajyun
●カテゴリ:コンピュータ
✍キーワード:CPU Java VM クライアント コンパイラ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● pahoo
●60ポイント ベストアンサー

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

合っています。


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

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


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

あります。

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

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


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

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

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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ