2010年2月19日

[mew-dist 29125] Re:cmewが例外で終わる

> dryrunなしに、さっそく試してみましたところ
> 予想に反してRuby版cmewの方が速いです。
>
> haskel版 46s
> ruby版 21s
>
> ユーザ時間もシステム時間もruby版の倍ちかくあるので、
> なにか無駄なことをやっているのかruby版が手抜きなのか...

> ZFSとの相性がわるいのか..

それは、ディレクトリのリンクカウントを参照していないからでしょう。UNIX
では、子のディレクトリがないことを、ディレクトリのリンクカウントを参照す
るだけで分かります。

Ruby 版ではディレクトリのリンクカウントを参照します。ただ、これが
Windows でちゃんと動いているのかは知りません。Haskell ではディレクトリ
のリンクカウントを調べる汎用的な方法はありません。やるとしたら、CPP を
使って、プラットフォームごとに #ifdef で区切る必要があります。

驚くべきことに、Mac のディレクトリのリンクカウントは、格納しているファ
イル数なので、上記を実装する気力が失せてしまいました。(-- xxx check
link count の部分です。)

というわけで、Mac で比べると Haskell の方が速いです。Windows でも、きっ
とそうでしょう。また、-f で実行すると UNIX でも速いと思います。

> haskellは勝手にマルチスレッドになるというわけではない?

ディスクを触るプログラムをマルチスレッドにしても、あまり効果はないでしょ
う。ロックも発生するから、逆に遅くなるかも。。。

> たしかruby版は以下のように
> 祖先はたどるが祖先の子孫は表示しないという仕様だったかと。

そうだったかも知れません。。。

--かず


投稿者 xml-rpc : 2010年2月19日 22:20
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/93466
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。