如何比较ruby中的eventmachine线程能力
我编写了关于ruby线程的代码,打开50个线程,每个线程等待2个。如何比较ruby中的eventmachine线程能力,ruby,multithreading,eventmachine,Ruby,Multithreading,Eventmachine,我编写了关于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"
#!/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}
但它只需1秒钟就可以完成。
我不知道如何编写代码,让它在每个eventmachine循环中等待几秒钟。
#!/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}
有人能帮忙吗?
谢谢事件机器是单线程的。你无法比较它们。若你们想测试真实情况,那个么你们可以试试DB“睡眠”。e、 蒙戈。
但使用EM库进行请求。e、 g.效率将取决于您的工作量。如果你正在做大量的IO工作,那么EM很有可能获胜,因为你不会承担上下文切换的成本。在执行IO时,有很多时间是空闲的 另一方面,如果你做的是计算密集型的工作,那么这也要视情况而定。EM有一个包含20个线程的线程池,如果您有超过20个并行计算,那么生成正确数量的Ruby线程会更好 EM线程只是Ruby线程。它们保存在线程池中,因此在线程执行时启动/停止线程可以节省一些开销。当您要求完成20项以上的工作时,EM还会将工作传递给线程
如果您想比较它们,只需创建一个EM程序和一个线程程序,它们与您的工作负载建模相同。那么他们需要多长时间才能完成。谢谢。你知道一种比较eventmachine和ruby线程效率的简单方法吗?你想确定什么?默认情况下,EventMachine的线程池中只有20个线程。为什么您想知道EM的线程与Ruby线程相比如何?(在内部,EM的线程池只是一堆线程。new的)我发现很多博客都说eventmachine比ruby线程更有效。但我发现ruby线程工作得很好。所以我希望测试一下,谢谢。但是你能给我看一些关于“EM线程只是Ruby线程”的证据吗?有人告诉我EM线程使用与linux内核相关的另一种方式!