문제

해시 배열을 통해 얼마나 오래 걸릴지를보고 싶었습니다.다음은 코드입니다.

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가 가장 공연자가되기를 기대하고 루비와 루비아스가 뒤 따르고 있습니다.

보자 :

# 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
.

이것은 내 컴퓨터의 출력입니다 (물고기 쉘 + 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는 8.188726의 루비와 14.193565의 마지막 Rubinius가있는 루비보다 4.367000의 가장 빠릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top