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
になります。
なるほど。。