###

alias hbin me

Ruby 惰性计算

今天看到一篇关于引入惰性计算, 百倍加速 Lo-Dash 的文章:How to Speed Up Lo-Dash ×100? Introducing Lazy Evaluation

于是 Google 了一下 Ruby 相关的资料,找到了 Enumerator::Lazy 模块。

写了一个 Benchmark:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# lazy_benchmark.rb
require 'benchmark/ips'

ARRAY = 1.upto(1_000_000)

Benchmark.ips do |x|
  x.report 'normal' do
    ARRAY.map { |i| i * i }.take(10).to_a
  end

  x.report 'lazy' do
    ARRAY.lazy.map { |i| i * i }.take(10).to_a
  end

  x.compare!
end

Benchmark 结果让我震惊!

1
2
3
4
5
6
7
8
9
10
Calculating -------------------------------------
              normal     1.000  i/100ms
                lazy     4.883k i/100ms
-------------------------------------------------
              normal      9.555  (± 0.0%) i/s -     48.000
                lazy     54.282k (± 3.5%) i/s -    273.448k

Comparison:
                lazy:    54282.1 i/s
              normal:        9.6 i/s - 5681.15x slower

先挖个坑,回头研究下这个惰性计算。

Comments