Fiberについて

Fiberはruby1.9から追加されて機能です。この前いじっていた時、良くわからなかったのですが、ちょうどそれを解説しているwebページもあってそれをみて「あー」って感じになったので、メモしておきます。

ようはFiberはyieldの処理の結果を保持し続けるということ。

$:.unshift(File.dirname(__FILE__))

t_fiber = Fiber.new do |val|
  val2 = Fiber.yield(val)
  val += 10 * val2
end

b_fiber = Fiber.new do |val|
  val += 20 * val
  Fiber.yield(val)
end

puts "t_fiber: #{t_fiber.resume(1)}"
puts "b_fiber: #{b_fiber.resume(2)}"
puts "t_fiber: #{t_fiber.resume(3)}"

この例だと最初に1が出力されて、そこでt_fiberの処理は一旦中断。
間にb_fiberの処理が実行されて再度t_fiber.resumeで処理が再開される。

このプログムラムの結果は


t_fiber: 1
b_fiber: 42
t_fiber: 31

になります。
なるほど。。