美文网首页java
Java多线程编程——计算机基础知识

Java多线程编程——计算机基础知识

作者: 老骥成长 | 来源:发表于2021-02-27 23:15 被阅读0次

    计算机基础知识


    前言

    在学习Java多线程编程之前,有必要先了解计算机基础知识。不必对个别问题过于深入,核心是后续的Java多线程编程。


    冯诺依曼计算机模型

    现代计算机模型基于——冯诺依曼计算机模型
    冯诺依曼计算机模型由冯诺依曼于20世纪40年代提出,因此成为冯诺依曼计算机模型。由运算器、控制器存储器以及输入输出设备组成。

    输入设备:鼠标、键盘等
    输出设备:屏幕、打印机等
    运算器&控制器:CPU
    存储器:内存、硬盘、U盘等

    冯诺依曼计算机理论抽象模型

    上面是理论抽象模型,现代计算机更为复杂,如下图

    现代计算机模型

    上图中的CPU和内存,是我们学习Java多线程编程的重点,因此我们主要看这两个模块。

    CPU

    CPU由三部分组成,控制单元、存储单元、运算单元。

    所谓控制单元,顾名思义,是控制整个cpu运行的关键单元。CPU能理解的语言是一条一条的汇编指令(以下都简称指令),想要指令正确有序的运行,就需要存储指令、指令计数以及记录指令所需数据的地址,这也就对应着三个寄存器,分别是指令寄存器、指令计数器、地址寄存器。

    存储单元很明显是用来存储数据的,由高速缓存组和寄存器组构成。cpu要读取内存中的值,必须经过高速缓存组和寄存器组。有小伙伴会有疑问,为什么我们有了内存,还需要再cpu里再加入存储单元呢?这是因为cpu和内存速度不匹配。根据摩尔定律CPU以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU,因此CPU和内存之间存在严重的速度差,CPU会有大量空闲时间在等待来自内存的数据,效率低下。
    举个例子,我一秒做一道算术题,老师两秒才给我出一道算术题,那我有一秒就要闲着。我老爹一看,这哪能行,不能让孩子闲着呀,干脆每次从老师那搞来一张算数试卷,熊孩子你算去吧,别闲着,算完再拿。在这个例子中,我的角色就是CPU,老师就是内存,试卷就是高速缓存。这样就能让CPU一刻不停的计算啦。
    目前CPU高速缓存已经形成了多级缓存架构,共有三个,L1~3,空间由小到大,距离由近到远,优先级由高到低。因此数据和指令的读取顺序为寄存器→L1→L2→L3→内存。
    L1 Cache,分为数据缓存和指令缓存,逻辑核独占。逻辑核心就是单个CPU上逻辑划分出的,可以独立运行线程的核心,也就是我们常说的单CPU 4核或单CPU 8核。
    L2 Cache,物理核独占,逻辑核共享
    L3 Cache,所有物理核共享
    为了进一步提升性能,CPU数据和指令读取还定义了两个特性:时间局部性、空间局部性
    时间局部性:数据A现在被用到,接下来一段时间也可能被用到。(因此数据和指令会被缓存在高速缓存中一段时间,避免多次读取内存)
    空间局部性:数据A被用到,那么和数据A地址相连的其他数据也可能被用到。(因此读取数据和指令时,会将和目标数据A地址连续的数据BCD...一起读取到高速缓存,避免多次读取内存)

    运算单元,用二进制完成加减乘除等数学计算。

    最后说一下关于CPU运行安全级别。CPU运行安全级别是为了操作系统安全而做出的划分,分为ring0~3。windows和linux系统都只是用了ring0和ring3。操作系统运行在ring0,而用户应用程序运行在ring3。
    ring0:是我们常说的内核态,可以操作内核空间和用户空间的内存(下文内存模块会讲到此概念)
    ring3:是用户态,只能操作用户空间的内存。

    内存

    大家都知道内存存储着CPU运行所需要数据,没太多好说的,主要讲一下上文提到的内核空间和用户空间。
    正如CPU划分运行安全级别一样,为了操作系统的安全,操作系统将内存也划分为内核空间和用户空间。
    内核空间:CPU处于内核态时才可操作
    用户空间:CPU在内核态和用户态时都可操作


    总结

    由冯诺依曼计算机模型发展出现代计算机应用模型,其中CPU和内存是核心。
    为了解决CPU和内存的速度差,CPU发展出了高速缓存L1~3和时间局部性、空间局部性。
    为了解决操作系统安全问题,划分操作系统ring0内核态,ring3用户态。
    CPU调度的基本单位——线程,有两种模型,内核线程模型KTL和用户线程模型UTL。
    内存是为了操作系统安全问题,划分内核空间和用户空间。


                                                                         秃了,也强了,一只走在秃头路上的程序猿

    相关文章

      网友评论

        本文标题:Java多线程编程——计算机基础知识

        本文链接:https://www.haomeiwen.com/subject/hhaifltx.html