質問: JavaのマルチコアCPU対応について教えてください。 昨今のクライアントもサーバー機もCPUはマルチコアになっています。CやC++等ではIntelのマルチコアコンパイラがあって、マルチコア用のコーディングをしなければいけないようです。翻って、Javaはどうなのでしょうか?Javaコードをコンパイルしてもバイトコードになるだけですから、問題はJava VM側になるような気がするのですが。まずここまでは、あってるでしょうか? そして、今のJava VMはマルチコア対応してるのでしょうか?また、マルチコア用のプログラミングテクニックというのは有るのでしょうか?初心者の質問ですが、よろしくお願いします。
回答: > > 問題はJava VM側になるような気がするのですが。まずここまでは、あってるでしょうか? > > > 合っています。 > > 今のJava VMはマルチコア対応してるのでしょうか? > > > しています。ただし、パフォーマンスには改善の余地があるといわれています。(「マルチコア・プロセッサの普及で激変するアプリケーション開発の現場」参照) > > マルチコア用のプログラミングテクニックというのは有るのでしょうか? > > > あります。 マルチスレッドで設計するのが定石です。 Javaでのコーディングにおいては、Threadインスタンスを利用するのが手っ取り早い方法です。 スレッドというのはプログラムの実行単位の考え方で、これ単独である程度の機能を発揮する関数/サブルーチン/クラスの固まりだととらえてください。他のスレッドと情報をやり取りするためのインターフェースが必要です。 (実際にはそれほど単純ではないのですが、)プログラム実行時にはスレッド1つに対してCPUのコアが1つ割り当てられると考えてください。たとえば、スレッドAとスレッドBが互いに情報連携する必要なく動くことができれば、デュアルコアCPUの能力を発揮できることになります。 実際の設計では、スレッドAとBは、どこかの時点でインターフェースをとることになるので、その時点で処理が遅い方に引きずられ、他方のコアが「待ち」に入ってしまいます。 この「待ち」をいかに少なくするかが、マルチスレッド設計の肝になります。