memory model https://golang.org/ref/mem heppens-before的概念 内存重排 为了读写内存的效率,会对读写指令进行重新排列,这是cpu重排。 还有编译器重排: x = 0 for i in range(100): x = 1 fmt.Println(x) 编译器优化后 x = 1 for i in range(100): fmt.Println(x) 但是一旦x被别的goroutine修改,就会无法出现预期的结果。 CPU为了抚平内核、内存和硬盘之间的读写……

阅读全文