タグ

ブックマーク / druby.hatenablog.com (2)

  • BartenderのAPIで練習するFiberの使い方 - @m_seki の

    Fiberの使い道を考えるために、selectと組み合わせて処理を単純に記述できる(のではないか、ということを確かめるために)部品を作ってみました。 GitHub - seki/bartender: Async I/O using Ruby Fiber selectのラッパー まずFiberと関係ない部分です。selectの簡単なラッパーです。今後、Ruby体にもっと良いものが載り、このレイヤーは後で捨てられるだろう、と考えています。 module Bartender class Context def []=(event, fd, callback) # イベント種(:read, :write)とfdに、コールバックを登録します。 # 一つの組みに、一つのコールバックだけ登録できます。 # コールバックされても消えません end def delete(event, fd) # コールバ

    BartenderのAPIで練習するFiberの使い方 - @m_seki の
  • Fiberのための同期機構の作り方 - @m_seki の

    Rubyのスレッドは素晴らしいと思うのですが、なぜか人気がありません。 Fiberで書けば人気が出ると思うので、ときどき調べています。多くのサンプルは次のようなジェネレーターっぽいものです。 fib = Fiber.new do a, b = 1, 1 while true Fiber.yield(a) a, b = b, a + b end end 10.times do |n| p [n, fib.resume] end Enumeratorなどの実装もこんな感じでできてるんでしょうね。 二つの実行主体(fibのFiberと10.times..してるメイン部分)はメイン部分がFiberを利用しているような構図です(??)。 resumeするべき相手のことを知ってるし、むしろFiberが資源みたいな感じ(???)。 マルチスレッドでのプログラミングのように、複数のFiber間で連携する雰

    Fiberのための同期機構の作り方 - @m_seki の
  • 1