我写了这段关于ruby线程的代码来打开50个线程,每个线程等待2s。
#!/home/sun/.rvm/rubies/ruby-1.9.3-p448/bin/ruby
ts = []
50.times do |p|
ts << Thread.new do
sum = 0
5.times do |i|
sleep(2)
end
puts "turn "+p.to_s+" finished"
end
end
ts.each {|x| x.join}
并且与 ruby eventmachine 相比,我不能在 EM.do 中使用 sleep,因为它会阻塞 eventmachine 的反应器。
所以我尝试在下面编写代码:
#!/home/sun/.rvm/rubies/ruby-1.9.3-p448/bin/ruby
require 'eventmachine'
ts = []
EM.run do
q = 0
def dfs(tm)
return 0 if tm == 0
EM.add_timer(2) do
dfs(tm-1)
end
end
50.times do |p|
op = proc do
dfs(5)
end
callback = proc do
puts "turn "+p.to_s+" finished"
q += 1
if q == 50
EM.stop
end
end
EM.defer(op,callback)
end
end
但它只用了 1 秒就结束了。我不知道如何编写代码让它在每个事件机器循环中等待几秒钟。
有人可以帮忙吗?谢谢!