BT

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

| 作者: Werner Schuster フォローする 6 人のフォロワー , 翻訳者 金森 諭 フォローする 0 人のフォロワー 投稿日 2009年1月8日. 推定読書時間: 2 分 |

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

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT