マルチコア時代のCPUリソースを有効活用--Java EE 7で進化した並列処理を理解する

森英幸
2013-06-05 10:58:00
  • このエントリーをはてなブックマークに追加

 「この方法は、本当にパフォーマンスが悪いのです。スレッドの生成は比較的コストが高い処理ですが、このコードではリクエストごとに無制限にスレッドが生成されてしまいます。スレッドの生成に伴うメモリの確保やコンテキストスイッチの発生によるオーバーヘッドが大きいため、パフォーマンスが出ないのです」

 ここで寺田氏は、簡単なデモを披露した。その内容は、256CPUコアのマシンで単純なシグマ計算を実行し、従来型のマルチスレッドコードと、Concurrency Utilitiesを用いて書き換えたコードでスレッドの利用状況を比較するというものだ。下の画像の左側が書き換え前、右側が書き換え後の結果である。

原始的なマルチスレッド・コードの実行状況。スレッドの生成に足を引っ張られてCPUリソースを使い切れていない
Concurrency Utilitiesで書き換えたコードの実行状況。CPUのコアが無駄なく使われている

 結果は一目瞭然。従来型のコードでアイドル状態のコアが目立つ一方で、書き換え後のコードはコアを余すことなく利用できていることが分かる。

 「これはConcurrency Utilitiesのデモですが、ほかのプログラミング言語に対するJavaのアドバンテージを示すデモとも言えます。たとえば、CやC++で高効率な並列処理を行おうとすると、かなり苦労することでしょう。JavaのConcurrency Utilitiesを使えば、簡単にスケーラビリティの高い並列処理が実装できるのです」(寺田氏)

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]