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 に答える