Java并发编程:硬件上的并发上篇

310 阅读2分钟

src=http___i0.hdslb.com_bfs_article_807aa46619617caf3a3ea976300b575abae0676c.png&refer=http___i0.hdslb.webp 本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

       大家在学并发编程的时候,基本上都是从Java层开始学习的。但是执行Java的JVM对服务器来说,只是执行在操作系统上的应用。而本文将为大家讲解的,就是硬件上为并发做了哪些支持。

CPU逻辑结构

       在硬件中,跟并发关联最紧密的就是CPU,毕竟计算机就是通过CPU的多核并发运行来实现并行处理的,那么,CPU都是由哪些结构组成的?具体如下:

  • 程序计数器

是的,你没看错,就是程序计数器,跟JVM的那个程序计数器的名字一样,而且,他们的功能也是类似的。都是用来记录当前命令执行到哪里了。
程序计数器是线程隔离的。

  • 寄存器

用来存储运行时数据的。也是线程隔离的。

  • 运算逻辑单元

功能如其名,就是用来进行算术运算的。

  • 控制单元

用来控制CPU运行的

  • 内存管理单元

计算机存储结构

       了解了CPU的构成,我们再来看看,计算机的存储结构是怎样的,如下图: image.png

       从上图,我们可以看到,在计算机中,定义了4层缓存结构。在这4层缓存中,最靠近CPU的是寄存器,读写速度是最快的,但是其容量也是最小的,成本也是最高的;而主内存则与之相反,读写速度最慢,容量最大。

局部性原理

       在CPU执行时,运行时数据是直接从寄存器取的,若寄存器没有的话,再从L1 Cache取,依次类推。
       在取数据的时候,计算机并不是一个个数据的取的,而是以为单位去取的。比如我们要取变量A的数据,计算机是直接将将变量A所属数据块一起取回,返回给上一级的。
       计算机为什么会这么做?这就涉及到一个叫做局部性原理的东西。按照这个原理,如果一个数据被取用了,那么其周边数据也有很大的概率会在后续的逻辑中被用到。因此,计算机才会以为单位取数据。
       在Linux中,一一般是4KB大小。

后言

       既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~