# Go False-Sharing linux查看cacheline大小. ``` > cat /sys/devices/system/cpu/cpu1/cache/index0/coherency_line_size 64 ``` osx查看cacheline大小. ``` > sysctl hw.cachelinesize hw.cachelinesize: 64 ``` 测试代码 ```go const ( N = 1024 * 1024 CacheLineSize = 8 // 8 * 8 bytes ) func Benchmark_True(b *testing.B) { arr := make([][]int64, N) for i := 0; i < N; i++ { arr[i] = make([]int64, CacheLineSize) } for k := 0; k < b.N; k++ { var n int64 for i := 0; i < N; i++ { for j := 0; j < CacheLineSize; j++ { n += arr[i][j] } } } } func Benchmark_False(b *testing.B) { arr := make([][]int64, N) for i := 0; i < N; i++ { arr[i] = make([]int64, CacheLineSize) } for k := 0; k < b.N; k++ { var n int64 for i := 0; i < CacheLineSize; i++ { for j := 0; j < N; j++ { n += arr[j][i] } } } } ``` 结果 | no | true | false | ratio | |---|---|---|---| | 0 | 11969223ns/op | 16002570ns/op| 74.79% | | 1 | 11837657ns/op | 15893455ns/op | 74.48% | | 2 | 11972342ns/op | 16790093ns/op | 71.30% |