昨日はwakhokナイトセミナーにてProject Zero 第2回「GroovyとProjectZero」を話しました。資料はこちら。
Zeroとマルチコア
さて、その後の懇親会では色々と話をさせていただきました。面白かったのはマルチコアとアプリケーションアーキテクチャの話。将来的にZeroが実行されることになるJavaVMは次期IBM J9の派生版になるそうです。で、このVMではZeroの実行はスレッドではなくて、すべてプロセスで起動することになると。こうした処理はマルチコアのサーバを想定します。各プロセスはコアに割り当てられるのです。簡単にいえば、ぽこぽこVMが起動して、それらが処理を行います。
前日、マルチコアなサーバでSUNのJavaVMをいじっている時、GCをプロセス起動で多重に動かすとかなり性能が上がる経験をしました。もちろん処理にはよるのですが画像処理させたら10倍違う(そもそもの実装がいまいちという話もあるが)。
Wikipediaを読むと、次のように書かれています。
計算機上で、複数の処理を同時に実行する(並行計算、マルチタスク)場合、処理を分割し、同時に実行する部分を指定する事が出来る、処理の分割の単位として、スレッドとプロセスがある。新たなプロセスを動作させるためには、CPUやメモリ空間などを割り当てる必要がある。それぞれのプロセスは、割り当てられた資源内で独立して動く。しかし、この方法では、メモリ空間が独立してしまうため、独立したメモリ空間が不必要な場合、メモリの利用効率が悪い。プログラムによっては、共有メモリを利用しながら複数の処理を行ったほうが楽な場合があるため、プロセスの機能から必要なところだけを利用したものがスレッドであるとも言える。
スレッドはプロセスの持つ問題を解決し、より効率よく資源を使うために考えられたものでした。ですが、マルチコアでメモリが膨大に積まれていると話は別です。むしろ、複数のCPUを効率よく使うためにはプロセスにしてしまったほうが独立して動くことができるのです。
コアによる並列処理の概念が一般的になってくると様々な変化があるのだろうなと思います。アプリケーションのアーキテクトも、ハードやチップ周りのアーキテクチャには興味を持っておくほうがよいでしょう。
日本の現状
そっから話は流れて、SOAってどうなの?とかアジェイルってどうなの?みたいな。ちょっと悲観的なことを言い過ぎたと反省していますが、日本のビジネス環境ではSOAやアジャイルが難しいというのが一般的な回答だと思います。
SOAは半分以上は政治的な問題が関係しています。結局、ドメインごとにサービスを切ったり、サービス間のメッセージを考えるというのは、ビジネスおいても同じようになっていないと無理です。プロセスを明確にしてソフトウェアで固めることが、グローバルや標準の視点から見て効率的であるということが政治的に決着されていないとSOAをいれるメリットはありません。ESBやBPELは銀の弾丸ではないのです。
あと、アジャイルの見積もりの話もありましたが、いまSIでいわれる一括見積もりはアジャイルとは矛盾があります。長期的なコストは人件費として考えてもらわないと動けなくなる。アジャイルはコミットを避けているのではなく、短期的なコミットをエンジニアに求め、長期的なコミットは顧客がするという分担な気がします。
どちらにせよ「なにをもって効率的なのか」というのは難しい問題ですね。
