0

我正在尝试使用em-synchrony 1.0.1.

require "em-synchrony"
class Worker
  attr_reader :station_queue, :list
  def initialize
    @station_queue = EM::Queue.new
    @list = ["value"] * 100
  end

  def run!
    station_queue.push(*list)
    station_popper = proc do |station|
      # Do some work with #{station}
      station_queue.pop(station_popper)
    end

    station_queue.pop(station_popper)
  end
end

EM::synchrony { Worker.new.run! }

问题是我遇到了ruby-1.9.2-p290/gems/em-synchrony-1.0.1/lib/em-synchrony.rb:26: stack level too deep (SystemStackError)错误。有没有办法从这样的列表中弹出每个项目而不会出现 stackoverflow 错误?

4

1 回答 1

0

问题是光纤只能处理 4kb 堆栈。处理包含 100 个项目的列表将导致其堆栈溢出

看起来他们正在为光纤实现一个可调整大小的堆栈。 http://bugs.ruby-lang.org/issues/3187

于 2012-06-14T00:11:02.557 回答