JAVA软件开发的底层知识,java程序员需要知道的底层知识(一)

java核心技术卷1基础知识原书版书

89.5元

包邮

(需用券)

去购买 >

1606731237267694.jpg

一、cpu(计算机的重要组成部分)cpu是计算机的核心组成部分,功能主要是解释计算机指令以及处理计算机软件中的数据,cpu中有一个重要的部件,就是时钟发生器,他就像人的心脏,推动着cpu进行一步一步的计算,比如我计算3+2需要多少步骤,通过时钟发生器不断的通电断电给cpu信号,推动cpu进行计算(比较粗略的理解)

PC:Program Counter 程序计数器(每个线程私有) 记录当前指令的地址

Registers: 寄存器 暂时存储cpu计算需要用到的数据

ALU:Arithmetic & Login Unit 逻辑运算单元

ALU逻辑运算单元,当一个线程获得执行时间片开始执行,需要进行运算的时候,那么ALU从寄存器中取出某个线程的数据来进行运算,

此处有一个知识点,就是现在说的超线程,比如两核四线程、四核八线程,是怎么实现的,比如原来的单核单线程,就是一个cpu的一个核里面只有一组PC(程序计数器)和Registers(寄存器),当一个线程获得执行时间片时,需要将前一个线程的数据先保存起来,再将自己的数据放入PC和Registers,而超线程的实现,就是cpu的一个核里面有两组PC和Registers,当其中的一个线程获得执行的时间片之后,ALU可以直接去该线程对应的PC和Registers取得数据,节省线程切换的消耗,达到提升性能的目的,如下图:

1606731243548982.jpg

下面我们再介绍缓存行的概念,缓存行是cpu缓存系统中的基本单位,当cpu从内存当中读取数据的时候,并不是你需要某个字节就只读取某个字节,而是将你需要的字节所在的内存块读取到缓存行,因为根据一定的预测,可能需要的数据也不只是这一个字节,也许周围的数据你也是需要的,这样的读取也可以提高效率到这里,再记录一个与缓存行有关的知识,MESI协议,缓存一致性协议是指一个缓存行,在不同的cpu中被修改之后,要保证数据一致,每个缓存行都有额外的两个位来存储缓存行的状态(modified、exclusive、shared、invalid),当处于同一个缓存行的数据,在A(cpu的内核)处被修改,那么B处的缓存行将变成失效状态,当B需要修改同一个缓存行的数据时,需要重新从内存中读取数据再进行修改,缓存一致性协议有MSI,MESI(Intel)、synapse、Firely、Dragon等,不同品牌的cpu使用不同的缓存一致性协议

此处有一个问题叫伪共享,我们以Intel cpu举例,当cpu的两个核分别修改了同一个缓存行中的独立变量时,实际上两个变量是互不影响的,但是由于他们在一个缓存行中,当A修改了a,B中的缓存行就会变成失效状态,这个时候如果B修改b,就必须要先提交A中的缓存行,然后B再去内存当中读取这个缓存行进行修改,此操作应该是一个并行操作,但是由于缓存一致性,却变成了串行,反而降低了效率

解决办法是,缓存行对齐:对于一些特别敏感的数字,会存在线程高竞争的访问,可以使用缓存行对齐的编程方式

JDK7中,很多采用long padding提高效率

1bfc949d131c9dd9018581360eb2222f.png

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92888 人正在系统学习中 相关资源:南网2013计量自动化上行规约调试软件-互联网文档类资源-CSDN文库

来源:旧南

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月9日
下一篇 2021年2月9日

相关推荐