美文网首页老薛读书会
码歌老薛大话Java性能调优,Java调优准备工作(二)

码歌老薛大话Java性能调优,Java调优准备工作(二)

作者: 坑王老薛 | 来源:发表于2019-01-26 14:35 被阅读9次

    老薛读书会

    二 大话java性能调优之准备知识

    本章主要是在做优化前的一些准备工作,主要了解一些概念以及理论。为了我们分享内容的连贯性,这里老薛稍微也加入了一些自己的理解以及文章中没有提到的一些概念作为普及。方便大家能够更好的理解本章内容表达的信息,例举了一些生活中常见的例子分享给大家。

    2.1 知识图谱

    知识图谱

    这里我们先将一些比较简单的概念进行阐述,把java的运行时环境和垃圾回收机制放入明天的读书会中。

    2.1.1 硬盘

    接口分类
    知识图谱

    不同的硬盘接口决定着硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏。

    • A: IDE(盘体和控制器在一起) 高可靠性,低成本。目前已经很少出现了。
    IDE接口
    • B: STAT 也称之为串口硬盘,是目前的主流产品
    STAT接口
    • C: SCSI(应用于小型机上的高速数据传输技术),带宽大、CPU占用率低,热插拔,价格贵。应用于高端服务器。LC就是Ultra-320 SCSI通道接口


      SCSI接口
    • D: 光纤 提高了多硬盘下的通信速度,热插拔性、高速带宽、远程连接、连接设备数量大等特点。适用于服务器、海量存储子网络等对于高数据传输率的有要求的产品。FC代表Fibre Channel光纤通道。机械硬盘中最高端的。


      光纤接口
    • E: SAS串行连接SCSI,是新一代的SCSI技术。SAS是并行SCSI接口之后开发出的全新接口。SS就代表普通的SAS通道接口


      SAS接口

    2.1.2:CPU/GPU

    中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

    图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。

    CPU和GPU的区别
    • A: GPU拥有比CPU更快的处理能力
    • B: GPU在存储器的带宽上要比CPU优势更加明显
    • C: 由于cpu的设计需要用作复杂的控制单元和缓存以此来提高少量执行单元的执行效率,而gpu的设置需要提高渲染图形,只需要增加并行处理单元和存储器控制单元即可。
    • D: GPU比CPU拥有更高的内存带宽
    • E: GPU拥有运算处理能力,很大的吞吐量,而CPU内存带宽小,执行单元少,吞吐量小,通过硬件机制来保证缓存的命中率和数据一致性。
    CPU和GPU的联系

    在目前的系统架构下,通过异构程序让CPU、GPU协同并行计算变成了一个新的课题。但是两者之间的存在存储墙问题,所以需要对于CPU和GPU的协同算法提出来一下要求:

    • 1:异构感知,根据底层硬件特点,需要使得一组算法发挥最大性能
    • 2:计算强度高:高强度的计算效率对于GPU很重要,因为GPU对于高浮点计算性能本身就是拥有天然优势,必须要保证发挥出来
    • 3:CPU和GPU交互开销比较小,数据传输和同步的开销
    • 4:CPU和GPU交互中药减少数据传输次数以及同步,通过算法优化,不然也很耗时。

    2.1.3:缓存

    拉牛车问题

    cpu的运算速度过快,导致内存、磁盘、网络资源的速度不匹配问题。解决方案很多,我们之前也聊过,现在我们主要讲讲缓存的应用。

    缓存

    cpu发起一个读操作时,通过总线bus将磁盘上的数据读取到内存中,而在读取的过程中cpu就空出来了。所以我们可以在读取的时候,先读取到缓存中,下次直接从缓存中获取。比如之前聊过的L1,L2等

    缓存内容

    L1是寄存器之外的高速缓冲设备,L2次之,当然现在还有L3.也就意味着cpu在读取磁盘内容是,也不是直接读取到内存中,而是一级一级读取到缓存中,然后方便下次读取。因为局部性原理所以缓存才得以实现。

    存储器层级结构

    越往上、存储资源越少,但是读写更快,成本越高。
    通过这样的层级结构,也就意味着当上层组件也访问下层时,我们会通过一系列的算法来保证缓存中的数据的命中率。比如之前说过的LRU、FIFO等。由于缓存设备本身的可能存储的数据就不多,所以我们为了更好的提高效能就必须具备有效的废基础。不然有可能得不偿失。当然缓存也不意味着越大越好,目前缓存设备可以达到16M、64M等,因为缓存过大没有有效算法,性能可能还没有不加缓存好。

    <span style="color:blue">你能谈谈你对于缓存的理解吗?也可以列举几个常见的缓存。</span>

    2.1.4:新兴技术

    新兴技术

    对于不用的类型的计算,其实在一定程度上他们都是有叠加的。而不是单独的个体。

    • 1:对于集中式计算而言,所有的计算资源都在一个屋里系统中,所有的资源全部共享,在其他计算应用中我们也能看到集中式系统的影子。在集中式计算中,我们通过流水线、并行指令、预测执行、多线程、任务等多种方式提高运算速度,这也是其他计算系统中都会采取的策略。
    • 2:并行计算,所有处理器要么是紧耦合于中心共享内存或者是松耦合于分布式内存中。处理器之间的通信通过<span style="color:green">共享内存[比如JMM模型]或者是消息传递[Redis等等]</span>来完成。
    • 3:分布式计算,通过多个可以自治的计算机组成,拥有各自的私有内存,通过计算机网络通信,核心通信原则还是通过消息传递完成。
    • 4:云计算,可以是集中式的也可以是分布式的。通过物理或者虚拟的计算资源集中或者分布式的部署在大规模数据中心之上。
    • 5:普适计算,指在任何地点和时间通过无线、有限的方式通过普遍的设备进行计算。比如常见的物联网就是通过互联网云实现任何地点和时间的普适计算。

    关于上述内容,如果有疑问或者表述不清楚的地方欢迎大家指正。如果想加入读书会,请加老薛微信:lukun0402

    相关文章

      网友评论

        本文标题:码歌老薛大话Java性能调优,Java调优准备工作(二)

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