高速缓存

Java并发编程:volatile关键字解析

*爱你&永不变心* 提交于 2020-04-06 05:23:52
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。   volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。   以下是本文的目录大纲:   一.内存模型的相关概念   二.并发编程中的三个概念   三.Java内存模型   四..深入剖析volatile关键字   五.使用volatile关键字的场景   若有不正之处请多多谅解,并欢迎批评指正。   请尊重作者劳动成果,转载请标明原文链接:   http://www.cnblogs.com/dolphin0520/p/3920373.html 一.内存模型的相关概念   大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快

计算机基础

亡梦爱人 提交于 2020-04-06 00:32:10
一、为何要学习计算机基础?       Python是一门编程语言,即通俗一点说就是语言。     程序用编程语言来写程序,最终开发的结果就是一个软件。 操作系统 是出现在硬件之上的,是用来 控制硬件的。 所以,我们开发时只需要 调用操作系统为我们提供的简单的接口 就可以了。    如上图所示,我把计算机的系统分为了上面三大块。 硬件,操作系统,应用程序 。 二、计算机硬件介绍 1. 硬件 的目的:为了运行软件给它的一些指令。我们可以优先从硬件中提取出这三个主要的东西,分别是: CPU,内存,硬盘 在计算机中,用来计算的是什么呢?当然是 CPU 了。多数CPU都有两种模式,即内核态与用户态。这里的即内核态与用户态将会在下面的内容中讲到。     CPU是人的大脑,负责运算        内存是人的记忆,负责临时存储        硬盘是人的笔记本,负责永久存储        输入设备是人的耳朵或眼睛,负责接受外部的信息传给CPU        以上所有的设备都通过总线连接,总线相当于人的神经 总线示意图 三、处理器(寄存器及内核态与用户态切换)     1.计算机的大脑是CPU,它从内存中取指令-▶解码-▶执行,然后在取指令,解码,执行,周而复始,直至整个程序被执行完成。    2. 寄存器是一个存储设备, 最快的一种存储设备 就是寄存器。 3.寄存器的分类      

2018-2019-1 20165320 《信息安全系统设计基础》第五周学习总结

喜夏-厌秋 提交于 2020-04-02 12:12:37
教材知识点总结 存储技术 随机访问存储技术 静态的(SRAM):SRAM将每个位存储在一个双稳态的存储器单元中 动态的(DRAM):DRAM将每个位存储为对一个电容的充电 特性比较: 访问主存结构: 传统的DRAM:DRAM芯片中的单元被分成d个超单元,每个超单元都由W个DRAM单元组成,一个d*w的DRAM总共存储了dw位信息。超单元被组织成一个r行c列的长方形矩阵。 增强的DRAM 1、 快页模式DRAM 2、扩展输出数据DRAM 3、同步DRAM 4、双倍数据速率同步DRAM 5、 视频RAM 非易失性存储器 1、 电子可擦出PROM 2、可擦可编程ROM 3、闪存 磁盘存储 磁盘 构造:旋转速率、数据位、间隙、柱面、磁道、扇区 磁盘容量的决定因素:记录密度、磁道密度、面密度 公式: 固态硬盘的结构与特点 对程序数据引用的局部性 局部性原理:包括时间局部性与空间局部性 步长:随着步长的增加,空间局部性下降。 取指令的局部性 循环体具有良好的局部性。 评价原则: 重复引用同一个变量的程序-有良好的时间局部性。 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。 对于取指令来说,循环有好的时间和空间局部性。循环体越小,局部性越好 存储器层次结构 缓存:使用高速缓存的过程 存储器层次结构的中心思想:k层的更小更快的存储设备,作为k+1层的更大更慢的存储设备的缓存。

Oracle数据库的性能调整

僤鯓⒐⒋嵵緔 提交于 2020-03-24 14:18:05
oracle是一个高性能数据库软件。用户可以通过参数的调整,达到性能的优化。性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的,二是开发人员通过对应用程序的优化达到调整的目的。   在此,仅就系统参数的调整进行探讨,而不涉及应用程序的优化。对系统参数的调整,可以分为以下几个部分:   (1)调整内存分配   系统全局区(SGA)是一个分配给ORACLE 包含ORACLE 数据库实例控制信息的内存段。SGA的大小对系统性能的影响极大,其缺省参数设置只适用于配置很低的计算机,不适应收入系统现有设备的需要。这些参数若不作调整,会对系统资源造成巨大浪费。就收入系统的Alpha 1200而言,SGA的大小以160兆左右为宜。   初始化参数文件中的一些参数对SGA的大小有决定性的影响。参数DB-BLOCK-BUFFERS(SGA中存储区高速缓存的缓冲区数目),参数SHARED-POOL-SIZE(分配给共享SQL区的字节数),是SGA大小的主要影响者。   DB-BLOCK-BUFFERS参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O。每个缓冲区的大小等于参数DB-BLOCK-SIZE的大小。ORACLE数据库块以字节表示大小。   Oracle SGA区共享池部分由库高速缓存、字典高速缓存及其他一些用户和服务器会话信息组成

Oracle中常見等待事件的說明

北城余情 提交于 2020-03-14 11:10:23
Oracle中常見等待事件的說明 buffer busy waits 指出等待数据库缓冲区高速缓存中的缓冲区。这表示某个会话正把这个缓冲区读入高速缓存和/或修改它。也可能是支持许多并发INSERT操作的表上缺乏足够的空闲列表的表征 db file parallel write 指出与DBWR进程有关的等待。可能与DBWR进程或配置的DBWR I/O进程的数目有关。还可以指示较低或较高争用的设备 db file scattered read 指出与全表扫描有关的等待。可能表示I/O争用或太多的I/O db file sequential read 指出(在别的东西中)与一个索引扫描有关的等待。可能表示I/O争用或太多的I/O db file single write 指出与在一个检查点中标题写入有关的等待。典型的情况是在数据文件编号紊乱的环境中 direct path read 指示并允许直接I/O相关的等待。一般表示设备上的I / O争用 direct path write 指与direct path read相同。只不过对应于写入 enqueue 指出与锁定各种Oracle资源和组件的内部排队机制有关的等待。关于Oracle中完整的排队列表,请参阅Oracle8iReference Manual的附录B free buffer inspected

速读原著-TCP/IP(高速缓存)

╄→尐↘猪︶ㄣ 提交于 2020-03-09 15:17:30
第14章 DNS:域名系统 14.7 高速缓存 为了减少I n t e r n e t上D N S的通信量,所有的名字服务器均使用高速缓存。在标准的 U n i x实现中,高速缓存是由名字服务器而不是由名字解析器维护的。既然名字解析器作为每个应用的一部分,而应用又不可能总处于工作状态,因此将高速缓存放在只要系统(名字服务器)处于工作状态就能起作用的程序中显得很重要。这样任何一个使用名字服务器的应用均可获得高速缓存。在该站点使用这个名字服务器的任何其他主机也能共享服务器的高速缓存。 在迄今为止(图 1 4 - 9)所举例子的网络环境中,在 s u n主机上运行客户程序,通过主机n o a o . e d u的S L I P链路访问名字服务器。现在将改变这种设置,在 s u n主机上运行名字服务器。在这种情况下,如果使用 t c p d u m p监视在S L I P链路上的D N S通信量,将只能看到服务器因超出其高速缓存而不能处理的查询。 在默认情况下,名字解析器将在本地主机上( U D P端口号为5 3或T C P端口号为5 3)寻找名字服务器。从名字解析器文件中删除 n a m e s e r v e r行,而留下d o m a i n行: sun % cat /etc/resolv.conf domain tuc.noao.edu 在这个文件中缺少n a m e r s e

CASPP学习笔记:高速缓存

冷暖自知 提交于 2020-03-05 16:20:41
文章目录 高速缓存 如何在缓存中读取目标字节: 直接映射缓存(E = 1) E向关联缓存 如何进行缓存写操作: 缓存层次结构 编写缓存友好的代码 存储器山 改变内层循环的空间局部性 使用分块技术提高时间局部性 使用分块技术提高时间局部性 高速缓存 性质:体积小速度快的SRAM组成,完全由硬件控制,集成在CPU芯片内,储存着经常被访问的来自主存(main memory)的块(blocks)。 结构:S,E,B,其中s表示有多少个sets,e表示每个set有多少Line,b表示每个block中需偏移几个字节才能找到目标bytes。总容量是S * E * B 如何在缓存中读取目标字节: 先确定在哪个set,然后根据tag确定在哪个Line,然后根据block offset确定字节位置。 直接映射缓存(E = 1) 定义:每个set只有一行,当tag和当前set中的block.tag不复合(或者valid位为0),miss,此set.block被替换。 模拟:通过以下模拟可以发现当只有一行时,有相同set index的block会经常发生替换。(注意此处主存大小M是16字节怎么计算而来) E向关联缓存 定义:每一行set有多列(E>1),此时CPU会通过复杂的硬件,比较同一个set不同块的tag值,从而找到目标的block,目前能实现的最大E为16。 block的大小是一个平衡值

第六周学习总结

妖精的绣舞 提交于 2020-02-27 09:55:58
信息安全系统设计基础第七周学习总结 【学习时间:7小时】 【学习任务:《深入理解计算机系统》第六章】 一、学习过程 1.随机访问存储器分为动态(DRAM)和静态(SRAM)两种类型—— DRAM:每个单元由一个电容和一个晶体管组成;对干扰非常敏感,一旦受到干扰就不可恢复 SRAM:每个单元储存在一个双稳态晶体管内,由六体管电路实现;对干扰不敏感,消除干扰后即可回到稳定值 对比:SRAM比DRAM存取更快,但是所需要的晶体管多且密集程度低,造价更高 2.DRAM的芯片中的单元被分成d个超单元,每个超单元都由w个DRAM单元组成。一个d*w的DRAM总共存储了dw位的信息。信息通过引脚流出和流入单元;每个引脚携带一位数据。每个DRAM单元被连接到存储控制器电路中,它可以一次性传入或者传出W位。 3.非易失存储器 PROM:只能被编写一次 EPROM:可擦写可编程ROM;擦除次数可以达到1000次以上 闪存:固态硬盘就是基于此的磁盘驱动器 4..数据流通过总线的共享电子电路在处理器和DRAM之间来回;从主存到CPU的称为读事务,从CPU到主存的称为写事务。 5.主存<-->(存储器总线)<-->I/O桥<-->(系统总线)<-->CPU 6.磁盘结构 磁盘有若干盘片组成,密封在容器(磁盘驱动器)内;盘片中心有一个可以旋转的主轴,使磁盘以一定的旋转速率旋转

第七周学习报告

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-23 13:52:21
第六章 存储器层次结构 存储器系统是一个具有不同容量、成本、和访问时间的存储设备的层次结构。 6.1存储技术 随机访问存储器分为两类:静态和动态。静态SRAM比动态DRAM更快,但也贵的多。 CPU 寄存器、高速缓存存储器、主存储器、磁盘。 1、静态RAM SRAM将每个位存储在一个双稳态的存储器单元里。每个单元是用一个六晶体管电路来实现。 2、动态RAM DRAM将每个位存储为对一个电容的充电。 关于两种存储器中的特性书384页图6-2有示 3、传统DRAM DRAM芯片中的单元(位)被分成d个超单元,每个超单元都由w个DRAM单元组成。 一个d*w的DRAM总共存储了dw位信息。 将DRAM组织成二维阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量, 信息通过引脚流入流出芯片,每个引脚携带一个1 位 的信号。 4、存储器模块 DRAM芯片包装在存储器模块中,它是插到主板的扩展槽上的。常见的包装包括168个引脚的双列直插存储器模块,它以64位为块传送数据到存储控制器和从存储控制器传出数据,还包括72个引脚的单列直插存储器模块,它以32位块传送数据。 通过将多个存储器模块连接到存储控制器,能够聚合主存,当控制器收到一个地址 A 时,控制器选择包含 A 的模块 k ,将 A 转换为它的 (i, j) 的模式,并将 (i, j) 发送到模块 k 。 5、增强的DRAM

volatile修饰符

半世苍凉 提交于 2020-02-04 12:37:10
什么是volatile? 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:   1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。   2)禁止进行指令重排序。 volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略。 volatile 的特性 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。(实现可见性) 禁止进行指令重排序。(实现有序性) volatile 只能保证对单次读/写的原子性。i++ 这种操作不能保证原子性。 volatile 保证多线程的可见性,首要要明白内存模型的相关概念: 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。   也就是,当程序在运行过程中