Задать вопрос
beerdy
@beerdy
https://vk.com/beerdy

Зачем Ruby нужен fiber?

Собственно вопрос в шапке. Зачем нужен fiber в Ruby?
  • Вопрос задан
  • 2398 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
beerdy
@beerdy Автор вопроса
https://vk.com/beerdy
Вобщем так, сам разобрался зачем Фибры нужны - по РУССКИ говоря, скорее всего как внешние итераторы, к примеру так:
class PhotoClass
  def initialize(media)
    @fibs  = []
    @media = media
    @fib   = fib(media)
  end

  def read
    @fib.resume @media
  end

private
  def fib(media)
    Fiber.new do |media|
      loop do
        stop = true
        (0..media.length).each do |index|
          result = fiber_inner(index).resume media[index].stock_photos if media[index]

          unless result.nil?
            stop = false
            Fiber.yield ({ :index => index, :title => { :group => media[index].title, :image => media[index].stock_photos[result].title }, :url => media[index].stock_photos[result].image.url })
          end
        end
        Fiber.yield nil if stop
      end
    end
  end

protected
  def fiber_inner(num)
    return @fibs[num] if @fibs[num]

    @fibs[num] = Fiber.new do |content|
      content.each_with_index do |(image),index|
        Fiber.yield index
      end
      loop do Fiber.yield nil end
    end
  end
end

Используем во вьюхе:
<% loop do %>

                  <% image = @photo.read %>
                  <% break if image.nil? %>

                  <div class="portfolio-box cm<%= image[:index] %>-design">
                    <div class="portfolio-box-container work">
                      <img src="<%= image[:url] %>" alt="" data-at2x="<%= image[:url] %>">
                      <div class="portfolio-box-text">
                        <h3><%= image[:title][:group] %></h3>
                        <p>Краткое описание картинки изобра.</p>
                      </div>
                        <div class="work-bottom">
                          <a class="big-link-2 view-work" href="<%= image[:url]%>"><span class="icon_search"></span></a>
                          <a class="big-link-2" href="/complectation/index"><span class="icon_link"></span></a>
                        </div>

                    </div>
                  </div>
                  <% end %>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
затем же зачем в erlang нужны микропотоки и в golang горутины.
Ответ написан
Dem1
@Dem1 Куратор тега Ruby on Rails
Ruby on Rails developer
Основное отличие Fiber от Thread, в том, что переключение контекста вы программируете самостоятельно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы