BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Article: RubyのFiberを非同期I/Oに使うNeverBlockとRevactor

Article: RubyのFiberを非同期I/Oに使うNeverBlockとRevactor

Fiber(参考記事・英語) は活用できる新しい並行性プリミティブ(もっとも基本的な要素)としてRubyプログラマの中で徐々に認識されだしています。その中で、ユーザ空間スレッ ドやRuby 1.9のGiant Interpreter Lock(GIL:Ruby言語のスレッドが1度に1つしか走らないようにする)の問題に対処するのに、Fiberとノンブロッキングあるいは非同期の I/Oを組み合わせた方法を採用する2つの試みがあります。

ブロッキングシステムコールの一番の問題は、ほぼI/Oに関することです。readのようなブロッキングシステムコールでは1度に1つのデータしか 返りません。するとユーザ空間でスレッドを実行するシステムでは、ひとつのプロセス内の全てのスレッドがブロックされることになります。解決策はI/O要求をI /Oのブロッキングと切り離すことです。その一つの方法がブロッキングシステムコールが実行される前にI/O要求をキャッチして、このI/O要求をノンブ ロッキングな形で送り、要求元のFiberを一時停止させて別のFiberに実行権を与えるやり方です。そしてこのI/O要求に対しての応答をシステムが受けたら、元のFiberを再度スケジューリングすることになります。

Fiberはユーザに試練を課すことなくこの考えを実装する有益な並行性ツールとなります。今Fiberを使ったソリューションを実現するためのライブラリが2つあります。まさにこのためのソリューションとしてあるのがNeverBlockライブラリ(リンク)です(GithubにNeverBlock(リンク)、NeverBlock PG(リンク)、NeverBlock PG adapter for ActiveRecord(リンク)、非同期操作をサポートするMySQLアダプタのMySQLPlus(リンク)のレポジトリがあります)。より汎用的なソリューションとして、ErlangのActorや通信プロセスなどの考え方に基づいたTony Arcieri氏によるRevacotrライブラリがあります。私たちはNeverBlockプロジェクトのMohammad A. Ali氏(リンク)とRevactorライブラリのTony Arcier氏(リンク)に話を聞きました。

 

続きをお読みになりたい方は、以下URLをクリックしてください。
http://www.infoq.com/jp/articles/fibers-neverblock-revactor

また、Ruby1.9に関する話題が気になる方は、以下URLで表示される一覧よりお選びください。
http://www.infoq.com/jp/Ruby19

この記事に星をつける

おすすめ度
スタイル

BT