栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java高并发一

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java高并发一

一,CPU的多核并发架构与JMM模型

1.1什么是CPU的多核并发架构?

现在的电脑的CPU一般是多核的(说白了就是将两个以前的多个CPU整合到一起)如下图所示:由于CPU读取寄存器和CPU读取内存(又称主存)的速度差异巨大(相差几百倍,上千倍),所以引入缓存来缓存它们速度差异大的问题(由此来提高计算机运行的速度),由此组成的CPU——》缓存——》主存的架构如下图所示为CPU的多核并发架构。

 

1.2为什么加入缓存就可以提高计算机的运行速度,它是如何解决CPU与内存速度不匹配问题的?

根据空间一致性原则,时间一致性原则我们知道:内存中的某处数据A被读取到CPU中,那么A及其附件的数据大概率也会被读到CPU中。如果数据A在此刻被CPU读取,那么A在不久的将来也很可能被CPU读取。例如:我们在程序中的一个数组,如果这个数据的某个数据被使用到,那么它的相邻数据很可能被使用到,并且该元素所在的数组在不久的将来很可能被再次使用。如果CPU从内存读出一个数组元素来使用,使用后在存入内存,那么大部分的时间都会用在读取上,CPU将会被闲置。此时如果我们把整个数组读到一个高速缓存上,那么每次读取数据就不需要去内存中拿了,直接在缓存中拿,那么用于数据读取的时间就减少了,由此CPU的利用率提高了,计算机的运行速度自然就快了。

1.3为什么不直接把数组直接读到CPU中的寄存器呢?

因为CPU中寄存器的存储空间十分小,并且造价昂贵。CPU的价格>缓存>内存>硬盘,CPU的存储空间<缓存<内存<硬盘 

1.4为什么要学习CPU的多核并发架构,它与高并发有什么关系吗?

因为计算机后期的发展,我们使用了三级缓存来提高计算机的速度,三级缓存中的测试会导致正在并发中的代码数据不一致的问题,所以在学习高并发之前需要知道如何解决这个问题。

1.5什么是三级缓存,为什么要将缓存分三级?

CPU——》一级缓存——》二级环境——》三级缓存——》内存

 为了提高计算机的速度,原理和1.2的差不多

让你们看一下我的三级缓存的大小如图所示:

 

 1.6 能否说一下?三级缓存是如何导致并发过程中数据不一致的?

 我们知道:一级缓存是二级缓存的子集,存的是二级缓存中经常被用到的那一部分数据(以此类推二级缓存与三级缓存,三级缓存与主存的关系)由于一级缓存和CPU的内核一样多,当CPU1号读取数据A到它的一级缓存时,CPU2号也读取到它的一级缓存,CPU1号对数据A修改,修改数据A=A+1同步回内存,此时CPU2号不知道A数据被修改,它也进行A=A+1的操作,将数据同步的到内存中,这时会对原有的数据A+1进行覆盖,最终的值为A+1(预期的值应该是A+2)。那么这就是最终答案吗?当然不是。java虚拟机为了提高并发的效率,参考的就是CPU的三级缓存模型,于是就建立了JMM(java内存模型)JMM内存模型存在以上并发的问题,导致了我们java查询再并发时出现问题

 

 1.7java内存模型

我们知道到我们都知道jvm的存储空间主要是堆和栈,其中堆存储的对象实体,栈内存存储的引用之类的。下面是JMM的大致结构,其中堆栈对应内存(或者二级,三级缓存),工作内存对应一级缓存设计,java线程对应CPU。所以说JMM是仿造CPU多核并发结构进行设计。

注意:别理解成一个线程运行时,对应一个CPU运行它。

1.8JMM有什么操作?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号