gpt4 book ai didi

ruby - Rubinius 和 JRuby 怎么可能这么慢?

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:02 26 4
gpt4 key购买 nike

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

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。

关于ruby - Rubinius 和 JRuby 怎么可能这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com