Thursday, 27 May 2010

最近のプログラミング

C++ と Java が多いです。この前は、php/PostgreSQL も触ったか。戦力的には今年はいまいちかも。まぁ、育てないとダメなんだが、なんとなく「自分でやっちゃう」モードになりつつあります。それも、いつものことなんだけど。

Cerium 側はいろいろ直しているんだが、自分の手元にPS3がないのでテスト出来ない。が、学生がやってくれるわけでもなく。効果が良くわからない。Many Core 化したいんだが、微妙に CPU がたくさんある機械が手元にない。来年になればブレード使えるはずなので、それに合わせて準備かな〜 動かないコードを commit / push するのが得意。

同じようなコード繰り返し書いてたので、C++ Template 化してみたんですが、gdb 毎落ちるのはかんべんして下さい。C++ あまりにひどいので、Dにも手を出しましたが、そっちはそっちで問題ありあり。なんかダメダメじゃん。

Java でも同じような問題があるんだけど、Template/Java で、

  static を使った Singleton Pattern

ってのが動かない。結構、はまりましたが、結局、両方とも諦めました。Singleton は言語的にサポートして欲しいよ。

玩具的に分散プログラミングして欲しいかなと思ってやっている Java で書いた Federated Linda は、学生が(いつものように)ぶーたれているので、「そんなにひどいか?」と思って、自分でTree walk な例題を書いてみました。でも、ちょっとのつもりが、470行ぐらいに。さすが Java 無駄に行数が増える。

なんだけど、いきなりバグを見つけました。サーバとクライアントが同時に動くようなプログラムなんだけど、Selector がサーバとクライアントで別になっていたらしい。なんだが、プログラムは当然一つのSelectorだと思い込んでいて、プロトコルの一部が動いていなかった。かなり基本的なバグが残っていたのにびっくり。テストプログラムに抜けがあるのがダメなんだよな。やっぱり自分で書かないとダメだな。これも、ちゃんと、Singleton pattern が使えれば、はまらなかったはず。

Selector 一つ Thread 一つと言う構成でやっているんだけど、複数Threadで複数 Selectorを起動すると言う構成も可能。ただ、それだと、この前、読んだ、Cassandara と同じで、コードがかなり複雑になる。 学生は、Cassandara 流に書き直したいようですが、「出来るならやってみろ」ってところです。複数 Selector で性能が出るかどうかは、kernel 内部のlock の関係もあるので、やってみないとわからない。Linux は、このあたりで性能が悪くて、Window NTに負けたことがあり、かなりチューニングしたらしいが、でも、まだ、やっぱり勝ててないみたいです。select system call 自体がダメなんだと思う。今は kqueue/epoll とかあるけどね。

Lock free なデータ構造とかも流行なみたいなので、そういう方も見ないとダメか。

でも、こういう Thread たくさん、lock しまくり、C++ / Java って、実は、メインフレーム的なアプローチだと思う。そういうことしなくないから、Unix なはずなのに。Thread 使うのだったら、複数プロセス上げろよってのが元々の Unix の発想。

No comments: