我正在尝试用“永不阻挡”做某事,而我似乎无法让它发挥作用 我的期望:阻塞睡眠不应该减缓整个过程。我希望看到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
答案 0 :(得分:1)
你需要“冻结”你的时间
当你调用它时,Time.now
将始终自行执行
time = Time.now
5.times do
fiber_pool.spawn do
puts "bla @ #{time}"
sleep 1
end
end
答案 1 :(得分:1)
http://ruby-doc.org/core-1.9/classes/Fiber.html
使用suspend和resume计划光纤 - 因为在此示例中您不使用任何一个,所以代码将按顺序运行。据我所知,NeverBlock利用FiberPool与光纤和事件感知数据库驱动程序一起智能地暂停和恢复光纤,以便处理I / O事件。
答案 2 :(得分: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
它应该有效!