精华内容
下载资源
问答
  • Eureka工作原理

    万次阅读 多人点赞 2019-07-03 10:46:48
    Eureka 工作原理 上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。 Eureka 作为 Spring Cloud...

    Eureka 工作原理

    上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。

    Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。

    Eureka 核心概念

    回到上节的服务注册调用示意图,服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka Server 和 Eureka Client。
    在这里插入图片描述

    Eureka Server:注册中心服务端

    注册中心服务端主要对外提供了三个功能:

    服务注册
    服务提供者启动时,会通过 Eureka Client 向 Eureka Server 注册信息,Eureka Server 会存储该服务的信息,Eureka Server 内部有二层缓存机制来维护整个注册表

    提供注册表
    服务消费者在调用服务时,如果 Eureka Client 没有缓存注册表的话,会从 Eureka Server 获取最新的注册表

    同步状态
    Eureka Client 通过注册、心跳机制和 Eureka Server 同步当前客户端的状态。

    Eureka Client:注册中心客户端
    Eureka Client 是一个 Java 客户端,用于简化与 Eureka Server 的交互。Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息。因此当所有的 Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,但是当服务有更改的时候会出现信息不一致。

    Register: 服务注册
    服务的提供者,将自身注册到注册中心,服务提供者也是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。

    Renew: 服务续约
    Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改。

    服务续约的两个重要属性

    服务续约任务的调用间隔时间,默认为30秒
    eureka.instance.lease-renewal-interval-in-seconds=30
    
    服务失效的时间,默认为90秒。
    eureka.instance.lease-expiration-duration-in-seconds=90
    

    Eviction 服务剔除
    当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除。

    Cancel: 服务下线
    Eureka Client 在程序关闭时向 Eureka Server 发送取消请求。 发送请求后,该客户端实例信息将从 Eureka Server 的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:

    DiscoveryManager.getInstance().shutdownComponent()

    GetRegisty: 获取注册列表信息
    Eureka Client 从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与 Eureka Client 的缓存信息不同,Eureka Client 自动处理。

    如果由于某种原因导致注册列表信息不能及时匹配,Eureka Client 则会重新获取整个注册表信息。 Eureka Server 缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka Client 和 Eureka Server 可以使用 JSON/XML 格式进行通讯。在默认情况下 Eureka Client 使用压缩 JSON 格式来获取注册列表的信息。

    获取服务是服务消费者的基础,所以必有两个重要参数需要注意:

    # 启用服务消费者从注册中心拉取服务列表的功能
    eureka.client.fetch-registry=true
    
    # 设置服务消费者从注册中心拉取服务列表的间隔
    eureka.client.registry-fetch-interval-seconds=30
    

    Remote Call: 远程调用
    当 Eureka Client 从注册中心获取到服务提供者信息后,就可以通过 Http 请求调用对应的服务;服务提供者有多个时,Eureka Client 客户端会通过 Ribbon 自动进行负载均衡。

    自我保护机制

    默认情况下,如果 Eureka Server 在一定的 90s 内没有接收到某个微服务实例的心跳,会注销该实例。但是在微服务架构下服务之间通常都是跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,网络分区故障,导致此实例被注销。

    固定时间内大量实例被注销,可能会严重威胁整个微服务架构的可用性。为了解决这个问题,Eureka 开发了自我保护机制,那么什么是自我保护机制呢?

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制。

    Eureka Server 触发自我保护机制后,页面会出现提示:

    在这里插入图片描述

    Eureka Server 进入自我保护机制,会出现以下几种情况:
    (1 Eureka 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
    (2 Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
    (3 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

    Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。当个别客户端出现心跳失联时,则认为是客户端的问题,剔除掉客户端;当 Eureka 捕获到大量的心跳失败时,则认为可能是网络问题,进入自我保护机制;当客户端心跳恢复时,Eureka 会自动退出自我保护机制。

    如果在保护期内刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,即会调用失败。对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。

    通过在 Eureka Server 配置如下参数,开启或者关闭保护机制,生产环境建议打开:

    eureka.server.enable-self-preservation=true
    

    Eureka 集群原理

    再来看看 Eureka 集群的工作原理。我们假设有三台 Eureka Server 组成的集群,第一台 Eureka Server 在北京机房,另外两台 Eureka Server 在深圳和西安机房。这样三台 Eureka Server 就组建成了一个跨区域的高可用集群,只要三个地方的任意一个机房不出现问题,都不会影响整个架构的稳定性。

    在这里插入图片描述

    从图中可以看出 Eureka Server 集群相互之间通过 Replicate 来同步数据,相互之间不区分主节点和从节点,所有的节点都是平等的。在这种架构中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的 serviceUrl 指向其他节点。

    如果某台 Eureka Server 宕机,Eureka Client 的请求会自动切换到新的 Eureka Server 节点。当宕机的服务器重新恢复后,Eureka 会再次将其纳入到服务器集群管理之中。当节点开始接受客户端请求时,所有的操作都会进行节点间复制,将请求复制到其它 Eureka Server 当前所知的所有节点中。

    另外 Eureka Server 的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。所以,如果存在多个节点,只需要将节点之间两两连接起来形成通路,那么其它注册中心都可以共享信息。每个 Eureka Server 同时也是 Eureka Client,多个 Eureka Server 之间通过 P2P 的方式完成服务注册表的同步。

    Eureka Server 集群之间的状态是采用异步方式同步的,所以不保证节点间的状态一定是一致的,不过基本能保证最终状态是一致的。

    Eureka 分区
    Eureka 提供了 Region 和 Zone 两个概念来进行分区,这两个概念均来自于亚马逊的 AWS:
    region:可以理解为地理上的不同区域,比如亚洲地区,中国区或者深圳等等。没有具体大小的限制。根据项目具体的情况,可以自行合理划分 region。
    zone:可以简单理解为 region 内的具体机房,比如说 region 划分为深圳,然后深圳有两个机房,就可以在此 region 之下划分出 zone1、zone2 两个 zone。

    上图中的 us-east-1c、us-east-1d、us-east-1e 就代表了不同的 Zone。Zone 内的 Eureka Client 优先和 Zone 内的 Eureka Server 进行心跳同步,同样调用端优先在 Zone 内的 Eureka Server 获取服务列表,当 Zone 内的 Eureka Server 挂掉之后,才会从别的 Zone 中获取信息。

    Eurka 保证 AP

    Eureka Server 各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka Client 在向某个 Eureka 注册时,如果发现连接失败,则会自动切换至其它节点。只要有一台 Eureka Server 还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

    Eurka 工作流程

    了解完 Eureka 核心概念,自我保护机制,以及集群内的工作原理后,我们来整体梳理一下 Eureka 的工作流程:

    1、Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息

    2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务

    3、Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常

    4、当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例

    5、单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端

    6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式

    7、Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地

    8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存

    9、Eureka Client 获取到目标服务器信息,发起服务调用

    10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除

    这就是Eurka基本工作流程

    总结

    讲了 Eureka 核心概念、Eureka 自我保护机制和 Eureka 集群原理。通过分析 Eureka 工作原理,我可以明显地感觉到 Eureka 的设计之巧妙,通过一些列的机制,完美地解决了注册中心的稳定性和高可用性。

    Eureka 为了保障注册中心的高可用性,容忍了数据的非强一致性,服务节点间的数据可能不一致, Client-Server 间的数据可能不一致。比较适合跨越多机房、对注册中心服务可用性要求较高的使用场景。

    展开全文
  • MTCNN工作原理

    万次阅读 多人点赞 2018-11-01 17:47:26
    MTCNN工作原理 MTCNN是什么 MTCNN,Multi-task convolutional neural network(多任务卷积神经网络),将人脸区域检测与人脸关键点检测放在了一起,基于cascade框架。总体可分为PNet、RNet、和ONet三层网络结构, ...

    MTCNN工作原理

    MTCNN是什么

    MTCNN,Multi-task convolutional neural network(多任务卷积神经网络),将人脸区域检测与人脸关键点检测放在了一起,它的主题框架类似于cascade。总体可分为P-Net、R-Net、和O-Net三层网络结构。

    它是2016年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型主要采用了三个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测。这三个级联的网络分别是快速生成候选窗口的P-Net、进行高精度候选窗口过滤选择的R-Net和生成最终边界框与人脸关键点的O-Net。和很多处理图像问题的卷积神经网络模型,该模型也用到了图像金字塔、边框回归、非最大值抑制等技术。

    MTCNN实现流程

    构建图像金字塔

    首先将图像进行不同尺度的变换,构建图像金字塔,以适应不同大小的人脸的进行检测。

    P-Net

    全称为Proposal Network,其基本的构造是一个全卷积网络。对上一步构建完成的图像金字塔,通过一个FCN进行初步特征提取与标定边框,并进行Bounding-Box Regression调整窗口与NMS进行大部分窗口的过滤。

    P-Net是一个人脸区域的区域建议网络,该网络的将特征输入结果三个卷积层之后,通过一个人脸分类器判断该区域是否是人脸,同时使用边框回归和一个面部关键点的定位器来进行人脸区域的初步提议,该部分最终将输出很多张可能存在人脸的人脸区域,并将这些区域输入R-Net进行进一步处理。

    这一部分的基本思想是使用较为浅层、较为简单的CNN快速生成人脸候选窗口。

    Proposal Network

    R-Net

    全称为Refine Network,其基本的构造是一个卷积神经网络,相对于第一层的P-Net来说,增加了一个全连接层,因此对于输入数据的筛选会更加严格。在图片经过P-Net后,会留下许多预测窗口,我们将所有的预测窗口送入R-Net,这个网络会滤除大量效果比较差的候选框,最后对选定的候选框进行Bounding-Box RegressionNMS进一步优化预测结果。

    因为P-Net的输出只是具有一定可信度的可能的人脸区域,在这个网络中,将对输入进行细化选择,并且舍去大部分的错误输入,并再次使用边框回归和面部关键点定位器进行人脸区域的边框回归和关键点定位,最后将输出较为可信的人脸区域,供O-Net使用。对比与P-Net使用全卷积输出的1x1x32的特征,R-Net使用在最后一个卷积层之后使用了一个128的全连接层,保留了更多的图像特征,准确度性能也优于P-Net。

    R-Net的思想是使用一个相对于P-Net更复杂的网络结构来对P-Net生成的可能是人脸区域区域窗口进行进一步选择和调整,从而达到高精度过滤和人脸区域优化的效果。

    Refine Network

    O-Net

    全称为Output Network,基本结构是一个较为复杂的卷积神经网络,相对于R-Net来说多了一个卷积层。O-Net的效果与R-Net的区别在于这一层结构会通过更多的监督来识别面部的区域,而且会对人的面部特征点进行回归,最终输出五个人脸面部特征点。

    是一个更复杂的卷积网络,该网络的输入特征更多,在网络结构的最后同样是一个更大的256的全连接层,保留了更多的图像特征,同时再进行人脸判别、人脸区域边框回归和人脸特征定位,最终输出人脸区域的左上角坐标和右下角坐标与人脸区域的五个特征点。O-Net拥有特征更多的输入和更复杂的网络结构,也具有更好的性能,这一层的输出作为最终的网络模型输出。

    O-Net的思想和R-Net类似,使用更复杂的网络对模型性能进行优化

    Output Network

    集成架构及系统思想

    MTCNN为了兼顾性能和准确率,避免滑动窗口加分类器等传统思路带来的巨大的性能消耗,先使用小模型生成有一定可能性的目标区域候选框,然后在使用更复杂的模型进行细分类和更高精度的区域框回归,并且让这一步递归执行,以此思想构成三层网络,分别为P-Net、R-Net、O-Net,实现快速高效的人脸检测。在输入层使用图像金字塔进行初始图像的尺度变换,并使用P-Net生成大量的候选目标区域框,之后使用R-Net对这些目标区域框进行第一次精选和边框回归,排除大部分的负例,然后再用更复杂的、精度更高的网络O-Net对剩余的目标区域框进行判别和区域边框回归。

    下面是整个系统的工作流图

    工作流程

    技术细节

    FCN(全卷积网络)

    全卷积网络就是去除了传统卷积网络的全连接层,然后对其进行反卷积对最后一个卷积层(或者其他合适的卷积层)的feature map进行上采样,使其恢复到原有图像的尺寸(或者其他),并对反卷积图像的每个像素点都可以进行一个类别的预测,同时保留了原有图像的空间信息。
    同时,在反卷积对图像进行操作的过程中,也可以通过提取其他卷积层的反卷积结果对最终图像进行预测,合适的选择会使得结果更好、更精细。

    IoU

    对于某个图像的子目标图像和对这个子目标图像进行标定的预测框,把最终标定的预测框与真实子图像的自然框(通常需要人工标定)的某种相关性叫做IOU(Intersection over Union),经常使用的标准为两个框的交叉面积与合并面积之和。

    Bounding-Box regression:

    • 解决的问题:
      IOU小于某个值时,一种做法是直接将其对应的预测结果丢弃,而Bounding-Box regression的目的是对此预测窗口进行微调,使其接近真实值。
    • 具体逻辑
      在图像检测里面,子窗口一般使用四维向量(x,y,w,h)表示,代表着子窗口中心所对应的母图像坐标与自身宽高,目标是在前一步预测窗口对于真实窗口偏差过大的情况下,使得预测窗口经过某种变换得到更接近与真实值的窗口。
      在实际使用之中,变换的输入输出按照具体算法给出的已经经过变换的结果和最终适合的结果的变换,可以理解为一个损失函数的线性回归。

    NMS(非极大值抑制)

    顾名思义,非极大值抑制就是抑制不是极大值的元素。在目标检测领域里面,可以使用该方法快速去掉重合度很高且标定相对不准确的预测框,但是这种方法对于重合的目标检测不友好。

    Soft-NMS

    对于优化重合目标检测的一种改进方法。核心在于在进行NMS的时候不直接删除被抑制的对象,而是降低其置信度。处理之后在最后统一一个置信度进行统一删除。

    PRelu

    MTCNN中,卷积网络采用的激活函数是PRelu,带有参数的带有参数的Relu,相对于Relu滤除负值的做法,PRule对负值进行了添加参数而不是直接滤除,这种做法会给算法带来更多的计算量和更多的过拟合的可能性,但是由于保留了更多的信息,也可能是训练结果拟合性能更好。

    我的思考

    对于Soft-NMS来说,在进行非极大值抑制的时候,可以结合实际应用场景将部分重合的窗口的置信度与其重合度进行线性或者非线性变换来进行更富有逻辑意义的滤除,而不是简单的降低置信度之后进行统一滤除。
    在进行卷积的时候,是否能够使用不同大小的卷积核使得卷积网络更加敏捷,同时保留、突出的特征更多,从而进一步提高算法的精度与效率。

    参考文献

    1. Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
    2. Ways for Visualizing Convolutional Networks
    3. 全卷积网络 FCN 详解
    4. FCN
    5. 非极大值抑制(Non-Maximum Suppression,NMS)
    6. 【论文解析】MTCNN论文要点翻译
    展开全文
  • Mybatis工作原理

    万次阅读 多人点赞 2018-06-24 00:16:53
    本片博客针对Mybatis内部工作原理进行阐述。 一、Mybatis工作原理图 mybatis 原理图如下所示: 二、工作原理解析 mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件(也...

    引言

    在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹(参考:《MyBatis————基础知识》)。

    本片博客针对Mybatis内部工作原理进行阐述。

    一、Mybatis工作原理图

    mybatis 原理图如下所示:

    二、工作原理解析

    mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件(也可以用Java文件配置的方式,需要添加@Configuration)来构建SqlSessionFactory(SqlSessionFactory是线程安全的);

    然后,SqlSessionFactory的实例直接开启一个SqlSession,再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。

    说明:SqlSession是单线程对象,因为它是非线程安全的,是持久化操作的独享对象,类似jdbc中的Connection,底层就封装了jdbc连接。

    详细流程如下:

    1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。

    2、SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。

    3、SqlSession对象完成和数据库的交互:
    a、用户程序调用mybatis接口层api(即Mapper接口中的方法)
    b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象
    c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象
    d、JDBC执行sql。

    e、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。

    mybatis层次图:

    原图:https://blog.csdn.net/xudan1010/article/details/53435018

    参考文章:

    Mybatis实现原理深入解析

    Mybatis之工作原理

    mybatis加载顺序

     

    展开全文
  • cache结构与工作原理

    万次阅读 多人点赞 2017-11-23 14:44:55
    在经历N次的阅读之后,终于明白了cache的结构和工作原理。 首先,要想理解cache,先理解内存。内存的简单表示如下图,内存里面的内容的查找是根据地址来进行的,也就是说内存包含两点①地址②内存的内容(存的数据...

    在经历N次的阅读之后,终于明白了cache的结构和工作原理。

        首先,要想理解cache,先理解内存。内存的简单表示如下图,内存里面的内容的查找是根据地址来进行的,也就是说内存包含两点①地址②内存的内容(存的数据),根据地址来找数据。

                                                                                     图1   内存的结构

        上图的0000~0008是地址,A~I是存的数据,cpu根据地址去寻找数据。图中的一个字母代表一个字节的数据。

        我们都清楚,cache中的数据就是物理内存中的数据的子集,那么对于物理内存的一个数据,根据cache中可以放置这个数据位置的多少,可以分为三种:①如果cache中只有一个位置可以容纳这个数据,则为直接映射的cache;②如果cache中有多个地方可以放置这个数据,它就是组相联的cache;③如果cache中的任何地方都可以放置这个数据,那么它就是全相连的cache;如下图2所示:

                                                                            图2  cache的三种组成方式

        更详细的讲,cache的结构其实和内存的结构类似,也包含地址和内容,只是cache的内容除了存的数据(data)之外,还包含存的数据的物理内存的地址信息(tag),因为CPU发出的寻址信息都是针对物理内存发出的,所以cache中除了要保存数据信息之外,还要保存数据对应的地址,这样才能在cache中根据物理内存的地址信息查找物理内存中对应的数据。(当然为了加快寻找速度,cache中一般还包含一个有效位(valid),用来标记这个cache line是否保存着有效的数据)。一个tag和它对应的数据组成的一行称为一个cache line。如下图所示,下表中的一行就是一个cache line。

                                                                      图3   cache的基本结构

    具体的Data、Valid、Tag各有多大,在介绍了内存的地址划分之后再在下文中讲。

    知道了cache的结构之后,如何在cache中去寻找对应的数据呢?简单起见,我们先选择 直接映射的cache组成方式进行下文的分析

    首先对于一段物理内存(block),该物理内存上的每个字节的地址划分为以下几段:[3]

                                                                               图4   处理器物理内存地址的划分

    这样的话物理内存中的数据到cache的映射关系如下图5所示:

                                                                                    图5   cache的查找过程

        上图的映射原则就是:根据物理地址的中间三位(index字段)来定位当前数据应该在cache的哪一行,把物理地址的tag字段和该地址对应的内容放入对应的cache line的tag字段和data字段,并把相应的valid位置1。那么在之后进行cache寻找的时候就可以根据cache line的tag字段来辨认当前line中的数据是数据哪个block的。

        上图5中的地址00 000 00~11 111 11按照图4的原则进行地址划分:地址的最高两位为Tag字段;中间三位为index字段;最低两位为Block Offset 字段;由于Block Offset是两位,也就是一个block的大小是2²=4个字节的数据,也就是一个cache line的data字段包含4个字节的数据;index为3位,说明cache共包含2³=8个组(对于直接映射的cache,也称为8个行);很明显,cache的一个行中只能存储1 块(Block )=4字节的数据,但是按照图5的映射方式,会有2^(tag位数) = 2^2 = 4块的数映射到同一个行,此时通过Tag字段的比较来辨别是不是我们要取数据的地址,如果不是的话,也就是发生了cache的缺失。如图5的Block 0和Block 1的index字段都是000,按照上面的理论它们都应该映射到第 000=0行(这儿的行也就是组,因为图5是直接映射的cache),但是现在第0行的内容是K、L、M、N,也就是Block 1的内容,为什么呢?仔细看该cache line的tag=01,映射到第0行的块只有Block 1的tag字段=01,所以可以得知此时该cache line中存储的数据是Block 1的数据,此时如果CPU发出的访存请求是访问Block 0 的话,也就是发生了缺失。此时进一步定量分析的话,共有4个数据块竞争使用cache 第0行的位置,也就是说cache的命中率为25%。

        上面的过程总结起来就是:物理内存的索引字段(Index)选择cache 的行,通过对比物理内存和cache line的Tag来判断是否命中。块偏移字段(Block Offset)可以从cache line的数据块中选择期望数据。注意在这个过程中cache的index是不占空间的,它就类似于物理内存的地址,对于物理内存来说是通过地址去寻找数据,对于cache来说,是通过index来找到对应的cache line,或者更通俗的讲就是:cache line的地址对应的就是物理内存的index字段。

        此时该cache的容量计算如下:每一个cache line的数据字段占4个字节,共2³=8行,所以数据占据4×8=32个字节,一个cache line中tag字段和valid位占2+1=3bit,整个cache的tag+valid=3bit×8行=24bit=3Byte,通常情况下我们都是一cache中数据部分占的空间表示cache的容量,也就是32字节,但是实际上,它还额外多占用了3字节的存储空间[4]。

     

        图5的分析是针对直接映射的cache进行的,对于组相联或者全相连的cache的分析与之类似。如果是组相连的cache,每个组(set)里面包含多个行(line),通过内存地址的index字段来寻址组,确定组之后再根据tag来确定是否命中;对于全相连的cache,就不需要index字段了,因为全相连的cache相当于只有一个组的组相连cache。这是只需要根据要寻址的地址的tag来逐一与cache中的tag字段比较,如果有与之匹配的cache line,也就是cache hit了,如果遍历整个cache,也没有找到匹配的cache line,那就是cache miss了。

     

    注:为了叙述的简单性,省略了内存地址通过TLB的的虚实转换部分,由[1]可知,内存地址的Tag部分其实是需要先经过TLB的转化才能够去和cache line的tag部分去进行匹配的。

     

    参考:

    [1]Cache的工作原理

    [2]每个程序员都应该了解的 CPU 高速缓存

    [3]计算机体系结构:量化研究方法 Hennessy   P411

    [4]超标量处理器设计 姚永斌  P21

     

    展开全文
  • TOF的工作原理是什么

    万次阅读 2019-07-31 16:22:06
    TOF的工作原理
  • Webservice工作原理及实例

    万次阅读 多人点赞 2016-04-04 23:12:08
    Web Service工作原理 一、Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的...
  • MyBatis工作原理

    千次阅读 2019-09-24 16:49:16
    在学习 MyBatis 程序之前,需要了解一下 MyBatis 工作原理,以便于理解程序。MyBatis 的工作原理如下图 1)读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等...
  • Java虚拟机工作原理详解

    万次阅读 多人点赞 2012-12-21 15:03:32
     从这个框图很容易从大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入javac YourClassName.java此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者...
  • SpringMVC框架工作流程图及工作原理

    万次阅读 多人点赞 2018-07-10 09:13:39
    SpringMVC框架的工作原理图:SpringMVC的具体工作原理1、客户端用户发送请求至前端控制器DispatcherServlet。2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、HandlerMapping处理器映射器找到具体...
  • SpringMVC工作原理

    万次阅读 多人点赞 2013-11-25 11:19:08
    SpringMVC框架介绍  1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置...
  • SpringCloudg工作原理

    千次阅读 2018-05-25 10:52:30
    服务注册发现组件Eureka工作原理服务网关组件Zuul工作原理跨域时序图Eureka与Ribbon整合工作原理解决分布式一致性级联故障流程断路器组件Hystrix工作原理分布式追踪Sleuth工作原理SpringBoot自动配置工作原理...
  • gunicorn工作原理

    万次阅读 2017-11-10 09:46:14
    gunicorn工作原理 Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高...
  • MPU6050工作原理及STM32控制MPU6050

    万次阅读 多人点赞 2017-08-01 21:49:48
    要想知道MPU6050工作原理,得先了解下面俩个传感器:①陀螺仪传感器: 陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。人们根据这个道理,用它来保持方向。然后用多种方法读取...
  • springMVC工作原理

    千次阅读 2018-05-10 09:45:13
    不错的springMVC工作原理讲解,保存下,后续学习巩固:springMVC工作原理
  • 路由器工作原理

    万次阅读 多人点赞 2019-02-05 15:00:34
    路由:路由器控制层面的工作,决定数据包从来源端到目的端所经过的路由路径(host到host至今的最佳传输路径) 转发:路由器数据层面的工作,将路由器输入端的数据包移送至适当的路由器输出端...
  • 虚拟机工作原理

    千次阅读 2017-07-22 11:27:32
    Java虚拟机工作原理
  • 锁相环工作原理

    千次阅读 2019-06-17 09:12:50
    看了许多锁相环工作原理的资料,感觉讲得比较抽象,难以理解,多数时候我们只需要理解其基本原理和使用方法就可以了,下面结合一款单片机里面的锁相环来讲述其基本原理和使用方法: 一个芯片内部如果需要多个...
  • GPS工作原理

    千次阅读 2017-03-23 15:21:45
    GPS工作原理简介
  • 多角度带你认清Kylin的工作原理

    万次阅读 多人点赞 2020-05-16 09:22:09
     ...文章目录Kylin的工作原理维度和度量Cube 和 Cuboid工作原理技术架构总结 Kylin的工作原理         Apache Kylin的工作原理本质上是 MOLAP(多维立方
  • gulp-工作原理

    万次阅读 2020-10-09 20:46:31
    在本篇文章中主要是介绍,gulp的工作原理,希望可以帮助到大家,加深大家对gulp的理解 事先准备 安装依赖 gulp yarn add gulp stream 核心概念 1、读取流 所谓读取流,本质上就是读取文件的内容 2、转换流 所谓...
  • dubbo的工作原理

    万次阅读 多人点赞 2019-03-08 10:34:01
    dubbo的工作原理 1、面试题 说一下的dubbo的工作原理?注册中心挂了可以继续通信吗?说说一次rpc请求的流程? 2、面试官心里分析 MQ、ES、Redis、Dubbo,上来先问你一些思考的问题,原理(kafka高可用架构原理、es...
  • Akka工作原理

    千次阅读 2015-11-12 11:50:34
    Akka工作原理
  • 三极管工作原理详解

    万次阅读 多人点赞 2019-05-09 19:06:35
    1、三极管工作原理详解 2、图说三极管的三个工作状态 3、图解三极管基本知识及电子电路图 半导体三极管,又称为双极结型晶体管(bipolar junction transistor, BJT)。 广义上,三极管有多种,常见如下图所示 。 ...
  • 交换机工作原理

    千次阅读 2019-06-10 11:02:02
    交换机的工作原理(转发原理) 1.如果从传输介质进入交换机的某个端口的帧是一个单播帧,则交换机会去MAC地址表中查找这个帧的目的MAC地址。 A)如果查不到这个MAC地址,则交换机将对该帧执行泛洪操作。 B)如果查到了...
  • 蓝牙耳机工作原理

    万次阅读 多人点赞 2019-03-26 11:03:50
    蓝牙耳机的工作原理大致可分为如图的四个步骤: 1、手机中的解码芯片对MP3等音乐文件进行解码,产生数字信号并通过蓝牙发送给蓝牙耳机; 2、蓝牙耳机接收数字信号,并通过蓝牙耳机内部的数模转换芯片,把它转换成人...
  • Zcash:工作原理

    万次阅读 2019-04-20 06:51:29
    工作原理 Zcash 建立在严格科学之上、保护隐私的数字货币。交易可以高效、安全且低手续费地进行,同时还能保证交易的隐私性。您还可以选择性地公开地址和交易信息,以满足审计或监管的要求。 不同的交易类型 保护...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,676
精华内容 65,070
关键字:

工作原理