ruby スレッドに関するこのコードを書いて、50 のスレッドを開き、すべてのスレッドが 2 秒待機するようにしました。
#!/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 秒でオーバーしてしまいます。すべての eventmachine ループで数秒間待機させるようにコーディングする方法がわかりません。
誰でも助けてもらえますか?ありがとう!