利用CPU cache特性优化Go程序
demo 如下Go语言伪代码,开启两个协程,分别对一个结构体变量中的两个相邻的数据成员进行n次原子自增操作,当打开 _ [56]byte 这个看似多余的代码后,程序运行速度加快了一倍!你知道是为什么吗? ... type Foo struct { a uint64 // _ [56]byte b uint64 // _ [56]byte } ... go func() { for i := 0; i < 1000 * 1000; i++ { atomic.AddUint64(&foo.a, 1) } }() go func() { for i := 0; i < 1000 * 1000; i++ { atomic.AddUint64(&foo.b, 1) } }() // 等待两个协程执行完毕,记录总执行时间 ... 完整可运行代码见: https://github.com/q191201771/naza/blob/master/playground/p3/p3.go CPU cache 大家都知道,内存的速度远快于磁盘的速度,但事实上,跟CPU的处理速度相比,内存还是太慢了。CPU不愿意老是等内存,于是就有了 CPU cache 。CPU cache的速度比内存快数十倍。 很多资料上都有关于不同存储硬件速度和容量的对比,但是有的数据随着硬件的发展已经过期了