2019-11-04内存模型阅读总结

【阅读总结】
什么是计算机的内存模型?
程序的执行需要在CPU中进行,执行的过程中不免与数据发生交互,而数据则存储在计算机的主内存中。一开始CPU从主内存中读取数据,处理后再写入主内存中,各司其职,随着CPU技术的不断革新,处理数据的速度越来越快,而内存的发展并没有多大变化,导致一个进程在执行的过程中,大部分时间花费在与内存的读写上。
CPU在发展中为了解决以上问题,使用了缓存技术,再执行一个进程中与数据发生交互时,先从主内存中复制出一份高速缓存(读写快,容量小,成本高),对缓存进行高速读写,在本次进程执行完之后,再将缓存刷新到主内存中。之后随之出现了多级缓存,一级缓存(L1),二级缓存(L2),三级缓存(L3),一个线程再读取数据时,先从一级缓存中读取,如果没有命中再去二级缓存中读取,最后再去三级缓存或者主内存中读取。
接下来介绍使用缓存技术在单核单线程,单核多线程,多核心多线程时遇到的问题。
问题一 一致性问题
单核心单线程,单核多线程再执行程序时,由于只能同时执行一个线程,所以不存在数据一致性问题,当遇到多核多线程的时候,当两个线程同时进去不同的核心,复制出了同一份缓存,当两个线程没有到达共享缓存或主线程中就已经命中了数据时,他们分别对数据再缓存中进行读写,这时再一个CPU的不同核心中,必然会出现数据一致性问题。
问题二 处理器优化
CPU再执行程序的过程中,为了保证处理器内部的运行单元被充分利用,CPU会对代码进行乱序处理,这是处理器优化。
问题三 指令重排
很多编程语言的编译器也会有类似的优化,例如JAVA虚拟机的即时编译器(JIT)也会对代码进行指令重排
以上的情况会对程序造成各种各样的问题
再并发编程中,我们会遇到关于数据正确性(原子性,可见性,有序性)的问题:

  1. 原子性:在执行一段进程中,CPU不可以中途暂停然后再调度,即不被中断操作,要么执行完成,要么就不开始执行。
  2. 可见性:指的是当多个线程访问同一个变量时,如果一个线程修改了变量的值,其他线程会得到通知。
  3. 有序性:程序执行的顺序按照代码的顺序执行。

内存模型
为了保证共享内存的正确性(可见性、有序性、原子性),内存模型定义了共享内存系统中多线程程序读写操作行为的规范。通过这些规则来规范对内存进行读写操作,从而保证指令执行的正确性。它与处理器有关、与缓存有关、与并发有关、与编译器也有关。他解决了CPU多级缓存、处理器优化、指令重排等导致的内存访问问题,保证了并发场景下的一致性、原子性和有序性。
内存模型解决并发问题主要采用两种方式:限制处理器优化和使用内存屏障。
以上是对计算机内存模型的理解,同理Java的内存模型明天再写……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值