我是 EM 新手,编写了两个代码来比较同步和异步 IO。我正在使用 Ruby 1.8.7。
同步 IO 的示例是:
def pause_then_print(str)
sleep 2
puts str
end
5.times { |i| pause_then_print(i) }
puts "Done"
这按预期工作,需要 10 多秒才能终止。
另一方面,异步 IO 的示例是:
require 'rubygems'
require 'eventmachine'
def pause_then_print(str)
Thread.new do
EM.run do
sleep 2
puts str
end
end
end
EventMachine.run do
EM.add_timer(2.5) do
puts "Done"
EM.stop_event_loop
end
EM.defer(proc do
5.times { |i| pause_then_print(i) }
end)
end
5 个数字在 2.x 秒内显示。
现在我明确编写了 EM 事件循环在 2.5 秒后停止的代码。但我想要的是程序在打印出 5 个数字后立即终止。为此,我认为EventMachine
应该认识到所有 5 个线程都已完成,然后停止事件循环。
我怎样才能做到这一点?另外,请更正异步 IO 示例,如果它可以更自然和更具表现力。
提前致谢。