岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

Railsのどこがスレッドセーフでないのか

今まで、自分の書いているコードがスレッドセーフかどうかなど気にしたことがありませんでした。単に、必要がなかったからです。

が、Railsがスレッドセーフになるというニュースを読んだり、MongrelやRackについて調べたりしているうちに、こりゃオレオレフレームワークはマルチスレッドに対応させないとやばいぞ、という焦りがこみあげてきました。やばいよやばいよ。

とはいえ、何をどうすればスレッドセーフになるのか、まったく分かりません。そこで、スレッドの競合について詳しく書かれているという『オブジェクト指向スクリプト言語 Ruby』を入手、読んでみました。が、それでも良くわからない。

そもそも、Railsのどこがスレッドアンセーフなのか。明解に書かれたリソースをいくら探しても見つからない。見つかったのは、Mongrelの作者・Zed Shawのメールぐらい。でも、そのメールの内容も、Railsのコア開発者・Michael Koziarskiに「誇張表現がある」とつっこまれていたりする。もう、わけがわかりません><

結局、リンク先2件の情報を照らし合わせると、DB接続周りとautoload周りがアンセーフってことなのかなあ。DBについては、他の共用リソース同様、クリティカルセクションをMutexなんかで保護する、autoloadについては、面倒がらずにすべてrequireに変える、ということで良いのかしら?

蛇足ですが、スレッドセーフに関する知識のないRails開発者がもしいたとしたら、Railsがスレッドセーフになっても恩恵にあずかれないどころか、スレッドアンセーフなコードをマルチスレッド環境で運用するようなことにならないか、ちょっと心配です。

追記(2008-08-31

スレッドセーフRailsは、随所に入っている荒いロック処理を最低限必要とされる部分だけの最小ロックに変換したものになる。

http://journal.mycom.co.jp/news/2008/08/18/019/index.html

荒かろうが、保護されるべき箇所がロックされているのなら、すでにスレッドセーフだと思うんだけど…。ならマルチスレッド環境で運用しても問題ないはずだよなあ。MongrelがわざわざシングルスレッドでRailsを実行しているのは、スレッドアンセーフだからじゃなかったの?

「ロック処理を必要最小限にすること」を「スレッドセーフ化」と呼んでいるだけなのか、スレッドアンセーフな箇所をスレッドセーフにすることを含めて「スレッドセーフ化」と呼んでいるのか、さっぱりわかりません。みんな理解できてるのかなあ。やばいよやばいよ。

「パンダフルライフ」を見た

新宿ピカデリーで「パンダフルライフ」を見た。先月オープンしたばかりできれいな映画館なのだが、上映時間の15分から10分前にならないとスクリーンのある階に移動できず、それまでは3階ロビーで待つ必要がある。それほど広くないロビーなので、これから行かれる方はあまり早く行かないほうが良いだろう。

1階には多くのマスコミ関係者がいて、他の映画の舞台挨拶でもあるのだろうと思っていたら、なんと「パンダフルライフ」の舞台挨拶だった。ナレーションの菅野美穂と、毛利監督、そして中国のパンダ繁殖施設の方が登壇、映画に登場する雌のパンダが撮影後に出産したことなどを話していた。菅野美穂のことは(なぜか)桜っ子クラブ時代から知っているのだが、30歳を超えた今でもあの頃の印象と全然変わらない。俺は、中身は少年のままなのに、外見は立派にメタボったけどな! 大きなお世話だ!

この映画に対しては、ゴロゴロ転がるパンダや、坂をすべり落ちるパンダなどの、かわいらしい姿を楽しみにしていた。実際、そういったシーンも堪能できたのだが、子育ての仕方や単独行動を好む生態などについても詳しく説明されており、なかなか勉強になった。大人向けの映画だと思う。