Ruby/Rubyの基礎知識

Fiberによる協調的な並行プログラミング(3ページ目)

ノンプリエンプティブな軽量スレッドであるFiberを紹介し、その基本的な使い方、およびFiber#transferを用いた制限のないコンテキスト切り替えを解説します。

橋本 拓也

執筆者:橋本 拓也

Rubyガイド

Fiber#transfer

require 'fiber' するとFiber#transferが利用可能になります(開発初期段階では素のFiberとは区別されFiber::Coreという名前だったようです。

自身が表すファイバーへコンテキストを切り替えます。 自身は Fiber#resume を呼んだファイバーの子となります。 Fiber#resume との違いは、ファイバーが終了したときや Fiber.yield が呼ばれたときは、 ファイバーの親へ戻らずにメインファイバーへ戻ります。

instance method Fiber#transfer | Ruby2.1.0リファレンスマニュアル

まずfiberの中から別のfiberをresumeする例を示します。

この場合、f2.resumeの返り値はf2ファイバー自体が返す値となります。

一方Fiber#transferを使うと、

f2の中から、強引にf1のコンテキストに切り替えることが出来ます。

まとめ

以上でFiberの解説は終わりです。

Fiberは日々のプログラミングで気軽に使えるような機能ではないかもしれませんが、RubyにはThreadとは異なる並行処理へのアプローチがあるということ、またI/Oがコードのボトルネックになった時にパフォーマンスを改善する切り口になり得るということを覚えておくと良いと思います。

良い応用例が見つかったら、また別途記事にする予定です。

【編集部おすすめの購入サイト】
Amazonで Ruby 関連の書籍をチェック!楽天市場で Ruby 関連の書籍をチェック!
  • 前のページへ
  • 1
  • 2
  • 3
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます