原子读写性能简单测试

时间:2022-05-05
本文章向大家介绍原子读写性能简单测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

代码如下:

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("%vt%vn", 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倍左右。