URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7890
[ Назад ]

Исходное сообщение
"К Чему изобрели fiber? Глупость ли?"

Отправлено beerdy , 16-Июн-14 01:34 
Есть код по fiber  из разных литературных источников:

fib = Fiber.new do
  f1 = f2 = 1
  loop do
    Fiber.yield f1
    f1, f2 = f2, f1 + f2
  end
end
puts "Первые 10 чисел фибоначчи:"
10.times { puts fib.resume }

И вот я написал следующий кусок кода:


f1 = f2 = 1
def fact(f1,f2)
    f1, f2 = f2, f1 + f2
    #puts f1
    return f1,f2
end
#puts "Первые 10 чисел фибоначчи:"
10.times { f1,f2 = fact(f1,f2) }

А вот все вместе, в тест fiber проигрывает в четыре раза:

# coding: Utf-8

require 'fiber'
require 'benchmark'

Benchmark.bm do |bm|

    bm.report do
        f1 = f2 = 1
        def fact(f1,f2)
            f1, f2 = f2, f1 + f2
            #puts f1
            return f1,f2
        end

        #puts "Первые 10 чисел фибоначчи:"
        10.times { f1,f2 = fact(f1,f2) }
    end
    
    bm.report do
        fib = Fiber.new do
            f1 = f2 = 1
            loop do
                Fiber.yield f1
                f1, f2 = f2, f1 + f2
            end
        end
        #puts "Первые 10 чисел фибоначчи:"
        10.times { fib.resume }
    end
end

Результаты выполнения:

beerdy@laptop ~/ruby/w/ $ ruby test.rb
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.000025)
   0.000000   0.000000   0.000000 (  0.000102)
beerdy@laptop ~/ruby/w/ $ ruby test.rb
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.000016)
   0.000000   0.000000   0.000000 (  0.000063)
beerdy@laptop ~/ruby/w/ $ ruby test.rb
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.000012)
   0.000000   0.000000   0.000000 (  0.000051)
beerdy@laptop ~/ruby/w/ $ ruby test.rb
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.000012)
   0.000000   0.000000   0.000000 (  0.000051)

Вопрос - Зачем fiber изобрел Матц и его комманда? Объясните мне пожалуйста, может я чего не до понимаю?

Содержание

Сообщения в этом обсуждении
"К Чему изобрели fiber? Глупость ли?"
Отправлено pavlinux , 17-Июн-14 03:13 
Фибер - это модный GOTO :)