·

上面的代码大概跑下来耗时在2s左右,我在想这么久呀,于是我用Go跑了一个相同功能代码,测试下来耗时214ms左右。

package main

import (
    "fmt"
    "sync"
    "time"
)

var mu sync.Mutex
var N = 0

func add_one_thread(n uint64, w *sync.WaitGroup) {
    mu.Lock()
    defer mu.Unlock()
    var i uint64 = 0
    for i < n {
        N += 1
        i++
    }
    w.Done()
}

func main() {
    var start = time.Now()
    wg := &sync.WaitGroup{}
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go add_one_thread(10000000, wg)
    }

    wg.Wait()
    fmt.Println("cost time: ", time.Now().Sub(start))
    fmt.Println("N: ", N)
}

为什么差距这么大哪,根据以往的经验,我在想可能是Go语言在运行时的内存等资源用的比较多,而Rust相对来说牺牲性能来赢得资源的节省吧,有兴趣的朋友可以测试一下两者的资源消耗。