ページ

2009年10月1日

Tornadoのデータベース周りのブロックについて

まじめなお話じゃないです。イベントドリブンでシングルスレッドで処理すると、Webアプリだとデータベースの入出力あたりでブロックします。データベースのアプリケーションサーバ間は大体がネットワークでつながっていて、TCP/IPでお話ししています。で、Twistedにしろ、Tornadoにしろ、ネットワークでやるんだったらノンブロッキングでできそうですが、そうなっていません。また、データベース周りで遅くなることが結構あるので、このあたりがノンブロッキングになっているとよさそうに見えます。
さて、Twistedはシングルスレッドでノンブロッキングで動いているように見せかけておきながら、裏ではこっそりスレッドで動いています。まあ、PythonのデータベースのAPIにあわせる(ドライバーをそのままつけるようにする)とそうなっちゃうのはしかたないのですが、データベースのAPIを使わずにノンブロッキングでごりごり、専用のドライバーを書いちゃう猛者がいるとおもしろいなー。どこかで聞いたような気もするけど、とりあえず、TornadoかTwsitedで・・・。ちなみに、Twistedでデータベースの非同期を触ったら、とーってもめんどくさー、だった。完全に非同期でやる人って、あたまおかしいか、天才だ。

それから、Twsitedは完全にすべて非同期でやろうとしているんじゃなくって(しているところもあるけど)、インターフェースを統一して、すべてを同じように扱えるようにしているところがすごいんだな。まあ、やり過ぎのところもありそうだけど・・・

0 件のコメント: