• 建议回复和讨论问题的话尽量负责一些,把具体的代码和说明贴上。言之无物的回复还不如多看看之前别人的回复比较好。谢谢。

  • 这样的话是说的通的。所以我在 #4 给你的数据不够公平和精确。

  • @luikore 我觉得这正是两种语言的差别所在,因为 Ruby 作为解释型语言就是这样运行的啊。感觉这个就是见仁见智了。

    @jakit @nouse 大家倒是可以继续讨论。

  • 问题在于, Ruby 本身就是脚本语言,Go 是编译型的语言。大家都知道这一点,所以这样比较本身是没有问题的。更有意义的数据当然是比较 Ruby 原生和使用了 Go 共享库的性能。

    至于哪一种算法算 fib 更快,则是另外一个问题了。

  • 我电脑上 ./fib 1.8M, fib.dylib 817K。

  • Ruby 代码不变:

    # big_fib.rb
    a, b = 0, 1
    100000.times { a, b = b, a+b }
    #puts b
    

    Go 和你一样使用大数的包:

    // big_fib.go
    package main
    
    import (
        "math/big"
    )
    
    func main() {
        a := big.NewInt(0)
        b := big.NewInt(1)
    
        for i := 0; i < 100000; i++ {
            a.Add(a, b)
            a, b = b, a
        }
    }
    

    Ruby 的结果:

    time ruby big_fib.rb
    
    real    0m0.409s
    user    0m0.279s
    sys 0m0.120s
    

    Go 的结果:

    time ./big_fib
    
    real    0m0.046s
    user    0m0.038s
    sys 0m0.005s
    
    1. 这是一篇译文,通过 fib 介绍一下基础概念和用法。
    2. 抛砖引玉,大家可以深入挖掘,讨论一些真实场景。
  • 这里原文有句话大致是说:“为了简化比较的考虑,采用同样的算法”,略过漏译了,已补上。

    所以也可以用 Go 写您同样的算法来比较:

    # tail_fib.rb
    a, b = 0, 1
    40.times { a, b = b, a+b }
    puts b
    
    // tail_fib.go
    package main
    
    import "fmt"
    
    func main() {
        a, b := 0, 1
        for i := 0; i < 40; i++ {
            a, b = b, a+b
        }
        fmt.Println(b)
    }
    

    Ruby 的用时:

    $ time ruby tail_fib.rb
    165580141
    
    real    0m0.095s
    user    0m0.067s
    sys 0m0.021s
    

    Go 版本二进制的用时:

    $ time ./tail_fib
    165580141
    
    real    0m0.005s
    user    0m0.001s
    sys 0m0.004s
    
  • Rails 部署负载均衡代理 at 2018年01月09日

    Nginx 是 7 层负载均衡, F5 是 4 层负载均衡。正常的使用场景是 4 层负载均衡挡在 7 层前面,也就是又多了一层负载均衡。

    F5 的投入很高,所以使用 Nginx 可以撑的住的话,没有必要使用 F5(壕除外)。当然如果你想和之前使用 F5 时一样的架构,可以考虑部署 F5 的开源替代 LVS。

    FYI

Started learning Ruby and Rails from 2012 just in a loose manner mostly based on my Perl experiences. Very happy to join the Rubyists to get together with YOU and MORE~