タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

rubyとfiberに関するhiroyukimのブックマーク (2)

  • Fiberによる協調的な並行プログラミング [Ruby] All About

    Fiberによる協調的な並行プログラミングノンプリエンプティブな軽量スレッドであるFiberを紹介し、その基的な使い方、およびFiber#transferを用いた制限のないコンテキスト切り替えを解説します。 Fiberとは 今回の記事では、Fiberについて解説します。Fiberは Rubyにおける並行処理とスレッド・プロセスの機能 で解説した"Thread"に似ていますが、Threadにはない特徴を備えています。 RubyリファレンスマニュアルからFiberクラスの説明を引用してみましょう。 ノンプリエンプティブな軽量スレッド(以下ファイバーと呼ぶ)を提供します。 他の言語では coroutine あるいは semicoroutine と呼ばれることもあります。 Thread と違いユーザレベルスレッドとして実装されています。 class Fiber | Ruby 2.1.0 リファレ

    Fiberによる協調的な並行プログラミング [Ruby] All About
  • Rubyの軽量スレッドFiberを利用する -- ぺけみさお

    パーフェクトRubyを読んでいて目に止まったので、Ruby 1.9から導入すあれた軽量スレッドFiberを使ってみよう。 ThreadとFiberの最大の違いは、コンテキストの切り替えをプログラマが明示的に指定することだ。 Fiberを使えば、結果全体を作るのに大きなコストのかかる処理を段階的に実行させて、部分的な結果を随時取り出すような実装が可能になる。 FiberはFiber.newで生成し、ブロックでFiberで実行する処理内容を記述する。Fiberの実行はFiber#resumeの呼び出しで行う。処理はFiber.yieldでいったん停止して、呼び出し元に戻る。停止したFiberの再実行は、同じくFiber#resumeで行う。実行できる処理がなくなった状態でFiber#resumeを呼び出すと、FiberErrorが発生する。 fiber = Fiber.new do puts

  • 1