并发编程(一):先谈硬件——从 count++ 到原子性、可见性与有序性
《并发编程(一):先谈硬件——从 count++ 到原子性、可见性与有序性》这篇在博客园热度很高,讲的正是大家天天碰到的事。下面帮你把要点捋出来,结尾有能直接抄的结论。
目录 1. 从冯诺依曼体系结构说起 2. count++ 最终会变成什么? 3. 为什么需要 Cache? 4. 单核下的并发问题:为什么 count++ 会丢失更新? 5. 从单核走向多核:可见性问题 6. 多个内存操作之间的顺序又怎么办? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到这里,我们实际上遇到了三个问题 8. 硬件如何回答这三个问题? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 总结 这一篇继续沿用 count ,只关注硬件层: CPU 和内存系统到底会带来哪些并发问题,硬件又提供了什么能力? 1. 从冯诺依曼体系结构说起 冯诺依曼提出将程序当作数据对待,把程序(指令)和数据用同样的方式存储。根据这个理论,计算机可以分成控制器、运算器、存储器、输入设备和输出设备。 运算器和控制器组成 CPU,CPU 内部还有寄存器。
目录 1. 从冯诺依曼体系结构说起 2. count++ 最终会变成什么? 3. 为什么需要 Cache? 4. 单核下的并发问题:为什么 count++ 会丢失更新? 5. 从单核走向多核:可见性问题 6. 多个内存操作之间的顺序又怎么办? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到这里,我们实际上遇到了三个问题 8. 硬件如何回答这三个问题? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 总结 这一篇继续沿用 count ,只关注硬件层: CPU 和内存系统到底会带来哪些并发问题,硬件又提供了什么能力? 1. 从冯诺依曼体系结构说起 冯诺依曼提出将程序当作数据对待,把程序(指令)和数据用同样的方式存储。根据这个理论,计算机可以分成控制器、运算器、存储器、输入设备和输出设备。 运算器和控制器组成 CPU,CPU 内部还有寄存器。其中, Program Counter(PC,程序计数器)保存下一条指令的地址 ;Instruction Register(IR,指令寄存器)保存当前正在处理的指令; R1 这样的通用寄存器用于保存数据和中间结果。
目录 1. 从冯诺依曼体系结构说起 2. count++ 最终会变成什么? 3. 为什么需要 Cache? 4. 单核下的并发问题:为什么 count++ 会丢失更新? 5. 从单核走向多核:可见性问题 6. 多个内存操作之间的顺序又怎么办? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到这里,我们实际上遇到了三个问题 8. 硬件如何回答这三个问题? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 总结 这一篇继续沿用 count ,只关注硬件层: CPU 和内存系统到底会带来哪些并发问题,硬件又提供了什么能力? 1. 从冯诺依曼体系结构说起 冯诺依曼提出将程序当作数据对待,把程序(指令)和数据用同样的方式存储。根据这个理论,计算机可以分成控制器、运算器、存储器、输入设备和输出设备。 运算器和控制器组成 CPU,CPU 内部还有寄存器。其中, Program Counter(PC,程序计数器)保存下一条指令的地址 ;Instruction Register(IR,指令寄存器)保存当前正在处理的指令; R1 这样的通用寄存器用于保存数据和中间结果。 [代码示例略] CPU 执行程序的过程可以简化为: [代码示例略] 也就是说,CPU 会不断重复 Fetch → Decode → Execute ,依次执行程序中的机器指令。
目录 1. 从冯诺依曼体系结构说起 2. count++ 最终会变成什么? 3. 为什么需要 Cache? 4. 单核下的并发问题:为什么 count++ 会丢失更新? 5. 从单核走向多核:可见性问题 6. 多个内存操作之间的顺序又怎么办? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到这里,我们实际上遇到了三个问题 8. 硬件如何回答这三个问题? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 总结 这一篇继续沿用 count ,只关注硬件层: CPU 和内存系统到底会带来哪些并发问题,硬件又提供了什么能力? 1. 从冯诺依曼体系结构说起 冯诺依曼提出将程序当作数据对待,把程序(指令)和数据用同样的方式存储。根据这个理论,计算机可以分成控制器、运算器、存储器、输入设备和输出设备。 运算器和控制器组成 CPU,CPU 内部还有寄存器。其中, Program Counter(PC,程序计数器)保存下一条指令的地址 ;Instruction Register(IR,指令寄存器)保存当前正在处理的指令; R1 这样的通用寄存器用于保存数据和中间结果。 [代码示例略] CPU 执行程序的过程可以简化为: [代码示例略] 也就是说,CPU 会不断重复 Fetch → Decode → Execute ,依次执行程序中的机器指令。程序里的 count++ 最终也要转换成这样的指令。
目录 1. 从冯诺依曼体系结构说起 2. count++ 最终会变成什么? 3. 为什么需要 Cache? 4. 单核下的并发问题:为什么 count++ 会丢失更新? 5. 从单核走向多核:可见性问题 6. 多个内存操作之间的顺序又怎么办? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到这里,我们实际上遇到了三个问题 8. 硬件如何回答这三个问题? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 总结 这一篇继续沿用 count ,只关注硬件层: CPU 和内存系统到底会带来哪些并发问题,硬件又提供了什么能力? 1. 从冯诺依曼体系结构说起 冯诺依曼提出将程序当作数据对待,把程序(指令)和数据用同样的方式存储。根据这个理论,计算机可以分成控制器、运算器、存储器、输入设备和输出设备。 运算器和控制器组成 CPU,CPU 内部还有寄存器。其中, Program Counter(PC,程序计数器)保存下一条指令的地址 ;Instruction Register(IR,指令寄存器)保存当前正在处理的指令; R1 这样的通用寄存器用于保存数据和中间结果。 [代码示例略] CPU 执行程序的过程可以简化为: [代码示例略] 也就是说,CPU 会不断重复 Fetch → Decode → Execute ,依次执行程序中的机器指令。程序里的 count++ 最终也要转换成这样的指令。 2. count++ 最终会变成什么?
读完别停:把最触动你的一条记下来,这周就用上。能落地的阅读才算数,欢迎回来聊聊你的实践结果。 来源|博客园《并发编程(一):先谈硬件——从 count++ 到原子性、可见性与有序性》,https://www.cnblogs.com/ThinkerQAQ/p/22969810.html
评论(0)
暂无评论,来抢第一条。