代码如下:
package main
import (
"fmt"
"sync/atomic"
"time"
)
func bench1(nums []uint32) time.Duration {
t := time.Now()
for i := 0; i < len(nums); i++ {
atomic.AddUint32(&nums[i], 1)
}
return time.Now().Sub(t)
}
func bench2(nums []uint32) time.Duration {
t := time.Now()
for i := 0; i < len(nums); i++ {
nums[i] += 1
}
return time.Now().Sub(t)
}
func main(){
nums := make([]uint32, 10000000)
for i := 0; i < 5; i++ {
fmt.Printf("%v\t%v\n", bench1(nums), bench2(nums))
}
}
输出结果:
atomic | memory |
---|---|
74.395ms | 5.597ms |
67.055ms | 6.214ms |
68.2ms | 5.954ms |
68.147ms | 5.624ms |
67.652ms | 5.672ms |
测试环境:
OS: ubuntu 12.04
CPU: i7-3770
MEMORY: 32G
GO VERSION: 1.0.3
结论:
原子读写的执行时间大约是直接内存读写的10倍左右。