1

我正在尝试用“neverblock”做一些事情,但我似乎无法让它发挥作用。
我的期望:阻塞睡眠不应该减慢整个过程。我预计会看到 5 次具有基本相同时间戳的“bla”。

红宝石:

$ ruby --version
ruby 1.9.2dev (2010-03-31 trunk 27123) [x86_64-darwin10.2.0]

代码:

require "neverblock"
fiber_pool = NeverBlock::Pool::FiberPool.new(25)

5.times do
fiber_pool.spawn do
  puts "bla @ #{Time.now}"
  sleep 1
end
end

结果:

$ ruby test.rb 
Using Neverblock
bla @ 2010-04-07 11:00:28 -0400
bla @ 2010-04-07 11:00:29 -0400
bla @ 2010-04-07 11:00:30 -0400
bla @ 2010-04-07 11:00:31 -0400
bla @ 2010-04-07 11:00:32 -0400
4

3 回答 3

1

做这个:

require "neverblock"
require "eventmachine"

fiber_pool = NeverBlock::Pool::FiberPool.new(5)

EM::run do
  5.times do
    fiber_pool.spawn do
      puts "bla @ #{Time.now}"
      EM.add_timer(1) do
        EM.stop
      end
    end
  end
end

它应该工作!

于 2010-04-20T16:23:25.010 回答
1

http://ruby-doc.org/core-1.9/classes/Fiber.html

使用挂起和恢复来调度纤程 - 因为您在此示例中不使用任何一种,代码将按顺序运行。据我了解,NeverBlock 将 FiberPool 与 Fiber 和事件感知数据库驱动程序结合使用,以根据需要智能地挂起和恢复 Fiber 以处理 I/O 事件。

于 2010-04-07T21:15:51.820 回答
1

你需要“冻结”你的时间。
Time.now当你调用它时,它总是会自动执行

time = Time.now
5.times do
  fiber_pool.spawn do
    puts "bla @ #{time}"
    sleep 1
  end
end
于 2010-04-07T15:23:50.673 回答