Rust并发编程
放在十年前,多线程编程可能还是一个少数人才掌握的核心概念,但是在今天,随着编程语言的不断发展,多线程、多协程、Actor 等并发编程方式已经深入人心,同时多线程编程的门槛也在不断降低,本章节我们来看看
上面的代码大概跑下来耗时在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相对来说牺牲性能来赢得资源的节省吧,有兴趣的朋友可以测试一下两者的资源消耗。