Зачем нам нужны волокна

Для волокон у нас есть классический пример: порождение чисел Фибоначчи

fib = Fiber.new do  
  x, y = 0, 1 
  loop do  
    Fiber.yield y 
    x,y = y,x+y 
  end 
end

Зачем нам нужны волокна? Я могу переписать это с помощью того же Proc (закрытие, на самом деле)

def clsr
  x, y = 0, 1
  Proc.new do
    x, y = y, x + y
    x
  end
end

Так что

10.times { puts fib.resume }

и

prc = clsr 
10.times { puts prc.call }

вернут один и тот же результат.

Итак, в чем преимущества волокон. Какие вещи я могу написать с помощью fibers, которые я не могу сделать с помощью lambdas и других крутых возможностей Ruby?

95
задан skaffman 29 January 2012 в 11:05
поделиться