Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较ruby中的eventmachine线程能力_Ruby_Multithreading_Eventmachine - Fatal编程技术网

如何比较ruby中的eventmachine线程能力

如何比较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"

我编写了关于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}
但它只需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内核相关的另一种方式!