The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"К Чему изобрели fiber? Глупость ли?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Ruby, Rails)
Изначальное сообщение [ Отслеживать ]

"К Чему изобрели fiber? Глупость ли?"  +/
Сообщение от beerdy email(ok) on 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 изобрел Матц и его комманда? Объясните мне пожалуйста, может я чего не до понимаю?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "К Чему изобрели fiber? Глупость ли?"  +/
Сообщение от pavlinux (ok) on 17-Июн-14, 03:13 
Фибер - это модный GOTO :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру