簡體   English   中英

Rubinius和JRuby怎么可能這么慢?

[英]How can Rubinius and JRuby possibly be this slow?

我決定看看迭代一系列哈希需要多長時間。 以下是代碼:

pairs = [{name: "firstname", value: "string"},{name: "lastname", value: "string"},{name: "country", value: "string"},{name: "city", value: "string"},{name: "state", value: "string"},{name: "company", value: "string"},{name: "year", value: "string"},{name: "political_affiliation", value: "string"},{name: "social_security_number", value: "string"}] * 1000
blank = {}

start = Time.now
pairs.each do |pair|
  blank[pair[:name]] = pair[:value]
end

p Time.now - start

通過從循環之前的當前時間減去循環之后的當前時間來計算時間。

根據代碼中的數學計算,這是YARV 2.1.1中計算所花費的時間:

0.001962017

這是Rubinius 2.2.6花了多長時間:

0.022598

和jRuby 1.7.12

0.022317

據說Rubinius和jRuby比YARV具有性能優勢。 為什么他們花費的時間幾乎是執行相同基本操作的12倍? 這是正常的還是我有不正確的配置?

您的基准測試時間太短,受到環境負載的影響。 根據我的經驗,為了獲得可靠的基准測試,您必須獲得至少10秒的時間,以減少預熱時間。 大約10秒鍾我希望JRuby是最高性能的,其次是Ruby和Rubinius。

讓我們來看看:

# so_24049371.rb

require 'benchmark'

# NOTE THIS: YOU SHOULD TWEAK IT IN ORDER TO HAVE BENCHMARKS OF ~ 10 SECONDS
MULTIPLIER = 5_000_000
pairs = [{name: "firstname", value: "string"},{name: "lastname", value: "string"},{name: "country", value: "string"},{name: "city", value: "string"},{name: "state", value: "string"},{name: "company", value: "string"},{name: "year", value: "string"},{name: "political_affiliation", value: "string"},{name: "social_security_number", value: "string"}] \
  * MULTIPLIER
blank = {}

puts Benchmark.measure {
  pairs.each do |pair|
    blank[pair[:name]] = pair[:value]
  end
}

# so_24049371.fish

source (rbenv init -|psub)

for ruby_version in 2.1.2 rbx-2.2.7 jruby-1.7.12
  rbenv shell $ruby_version
  ruby -v
  ruby so_24049371.rb
end

這是我機器上的輸出(我使用fish shell + rbenv,你應該編寫自己的腳本):

> fish so_24049371.fish
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
  8.190000   0.000000   8.190000 (  8.188726)
rubinius 2.2.7 (2.1.0 build 2014-05-20 JI) [x86_64-linux-gnu]
 14.359762   0.003525  14.363287 ( 14.193565)
jruby 1.7.12 (2.0.0p195) 2014-04-15 643e292 on Java HotSpot(TM) 64-Bit Server VM 1.7.0_55-b13 [linux-amd64]
  4.570000   0.000000   4.570000 (  4.367000)

正如我想象的那樣,JRuby是最快的4.367000,而Ruby是8.188726,最后的Rubinius是14.193565。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM