摘要: 引子 考虑如下的简单程序,全局变量x初始值为0: 程序输出 1 2 或 2 2很容易理解,但也有可能输出为1 1。 Why? 原因便是x++不是原子操作,如果把它转为CPU指令形式,则很容易理解: (1) Load x (2) Inc x (3) Store x 当第一个线程运行完第一步时,第二个线 阅读全文
posted @ 2020-03-28 16:01 miaolong 阅读(4594) 评论(0) 推荐(0)
摘要: 什么是内存一致性模型 内存一致性模型决定了不同的线程对共享内存的访问的可见性,也就是说,当不同的线程写同一块内存时, 读内存会返回什么值. 考虑下面的例子: 初始状态: x = y = 0; Processor 0: (1) x = 1; (2) print (y); Processor 1: (3 阅读全文
posted @ 2020-03-26 14:54 miaolong 阅读(2124) 评论(0) 推荐(0)
摘要: 缓存架构 现代CPU都有多个核及多级缓存L1、L2、L3等,其中L1一般是每个核专用的,考虑简化的模型如下图: 一致性问题 假设CPU0 CPU1同时读了内存中的某段内容x=0,这时它们的缓存中都有该内容的副本0,然后CPU0将x的内容改为1,如下图: 这时如果CPU1需要再去访问x的值,但这时缓存 阅读全文
posted @ 2020-03-22 12:03 miaolong 阅读(1944) 评论(0) 推荐(0)
摘要: 存储层级 当代计算机一般有如下存储层级: 缓存主要是为了兼顾性能与价钱.一般来说,速度越快,价格越贵,因此使用小容量但速度更快的存储器作为速度低一级的存储器的缓存,可以提升性能同时不必花费太多的成本.存储层级中的每一级都可以作为下一级的缓存 缓存原理 考虑一个只有CPU、L1 cache、Main 阅读全文
posted @ 2020-03-16 19:09 miaolong 阅读(982) 评论(0) 推荐(0)