首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鲁比纽斯和JRuby怎么会这么慢?

鲁比纽斯和JRuby怎么会这么慢?
EN

Stack Overflow用户
提问于 2014-06-04 23:40:37
回答 1查看 1.8K关注 0票数 3

我决定看看迭代一个哈希数组需要多长时间。以下是代码:

代码语言:javascript
复制
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中计算所用的时间:

代码语言:javascript
复制
0.001962017

以下是Rubinius2.2.6中所用的时间:

代码语言:javascript
复制
0.022598

和jRuby 1.7.12

代码语言:javascript
复制
0.022317

据说Rubinius和jRuby比YARV有性能优势。为什么他们要花费几乎12倍的时间来执行相同的基本操作?这是正常的还是我的配置不正确?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-05 08:50:48

你是标杆太小的时间,这是妥协的环境加载。根据我的经验,为了有可靠的基准,你必须得到至少10秒的时间,以减少热身时间。大约10秒,我预计JRuby将是最具表现力的,其次是Rubinius。

让我们看看:

代码语言:javascript
复制
# 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
}

代码语言:javascript
复制
# 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,您应该编写自己的脚本):

代码语言:javascript
复制
> 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,比Ruby8.188726最快,最后一个Rubinius有14.193565。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24049371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档