介绍DefaultConfig类的组成。
 
 
1. DefaultConfig
 
DefaultConfig是Config的子类。其定义位于system/Config.scala:
 
他直接使用Config的第一个(primary)构造方法。在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
 
PS. 作为对比,找一个使用第二个(secondary)构造方法的子类:
 
在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
注意光标位置的不同。
 
DefaultConfig 由WithNBigCores和BaseConfig连接组成。++使用的是Parameters类中定义的方法,他把两个Parameters对象组合成为一个ChainParameters对象:
 
 
2. WithNBigCores
 
表示大核的个数及每个核的配置。
 
1) 配置项存储在PartialParameters中,需要动态匹配才能获取到;
2) 只包含一个配置项,其key为RocketTilesKey,继承在Field:
3) 配置项的值是一个RocketTileParams链表。我们把最后一行稍微改一下:
把光标定位到_ret上,使用Alt+Enter快捷键看Intellij IDEA有没有操作提示:
Enter键选择“Add type annotation to value definition”:
可以看到返回值类型为Seq[RocketTileParams]。这是一个小技巧。
 
4) 其中使用site(SystemBusKey)获取系统总线的配置值。
 
 
3. BaseConfig
 
其定义形式与DefaultConfig一致,多个Config组合成为一个BaseConfig。
 
 
4. 构造过程
 
整理一下DefaultConfig实例化的过程。
 
new DefaultConfig
1) 首先会调用其父类的构造方法;若要调用其父类的构造方法,则需要为之准备参数:
也就是创建Parameters p, p = new WithNBigCores(1) ++ new BaseConfig
 
2) 分别实例化WithNBigCores和BaseConfig;
 
3) 把WithNBigCores和BaseConfig的实例使用方法++组合到一起;
 
4) 调用Config的构造方法,产生DefaultConfig的实例;
 
最终构造的结果如下图:
其中,BaseConfig中只保留了最前面的两项配置。
 
 
5. 查找过程
 
假设有一个DefaultConfig的实例dftCfgInst,dftCfgInst(RocketTilesKey)的查找过程如下:
 
1) dftCfgInst(RocketTilesKey)调用的是View中的方法:
 
2) View.apply(pname)调用View.apply(pname, this);
 
3) View.apply(pname, this)调用find(pname, site);注意这里的site为this,也就是dftCfgInst对象本身;
 
4) find(pname, site)在Parameters中实现为:
所以调用chain(site, new TerminalView, pname),其中site为dftCfgInst;
 
5) chain(site, new TerminalView, pname)在Config中实现为:
委托给p的chain方法。
 
6) 这里dftCfgInst的p为ChainParameters,其chain方法定义为:
委托给x的chain方法;
 
7) 这里的x为WithNBigCores,是一个Config对象。如前所述,其chain委托给p.chain。这里的p为PartialParameters;
 
8) PartialParameters的实现如下:
在这里可以找到RocketTilesKey,也就是g.isDefaultAt(pname)返回真。
 
整理成表格如下:
 
 

Rocket - config - DefaultConfig的更多相关文章

  1. Rocket - config - implicit Parameters

    https://mp.weixin.qq.com/s/OH_Z1gdSUpfgM-tjx0OlrA   追溯配置信息的源头.   0. HasRocketCoreParameters   ​​ Has ...

  2. Rocket - config - Configs

    https://mp.weixin.qq.com/s/z2gUYuYQAHQCa_5HZcBszw   介绍各个配置项的组织方式.   参考链接: https://docs.qq.com/sheet/ ...

  3. Rocket - config - Parameters

    https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw   介绍配置类Parameters及其伴生对象的实现.   参考链接: https://docs.q ...

  4. Rocket - config - Keys & Params

    https://mp.weixin.qq.com/s/Y42EWrO7IoHRD_yHD4iRLA   介绍配置项.配置值以及他们的使用方式.   参考链接: https://docs.qq.com/ ...

  5. Rocket - config - View

    https://mp.weixin.qq.com/s/b5o3s2DgqOz3-iK8FqPeLQ   介绍配置相关的基础类及其继承关系.   参考链接: https://github.com/fre ...

  6. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  7. 快速的搭建JFinal的ORM框架示例

    JFinal默认用的是Freemarker作为视图. 所以,打架还是准备好俩个jar包吧! freemarker-2.3.16.jar JFinal-bin-1.5.jar 新建web工程和添加lib ...

  8. 使用c3p0连接池

    首先我们需要知道为什么要使用连接池:因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉,每次新建连接都需要140毫秒左右的时间而C3P0连接池会池化连接,随 ...

  9. Jfinal 入门

    Jfinal 入门 IDE----->IDEA 新建项目 新建web项目 添加maven特性 方便导入jar包,不用一个个导入了 配置pom.xml <dependencies> & ...

随机推荐

  1. 送你一份Redis书单,以后使用缓存的问题不用再问我啦!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书!

  2. Matlab2016b线性规划函数linprog的几个问题

    一.如何设置算法为单纯型法: options = optimoptions('linprog','Algorithm','dual-simplex') 二.linprog的参数用法: [x,Fval, ...

  3. RabbitMQ|异步

    目录 RabbitMQ|异步 1 概念|异步 1.1 同步与异步 1.2 比喻 2 生产者消费者设计模式 3 RabbitMQ介绍 3.1 主流消息队列比较: 3.2 RabbitMQ安装(mac电脑 ...

  4. LeetCode #188场周赛题解

    A题链接 给你一个目标数组 target 和一个整数 n.每次迭代,需要从 list = {1,2,3..., n} 中依序读取一个数字. 请使用下述操作来构建目标数组 target : Push:从 ...

  5. 【Hadoop离线基础总结】hive的窗口函数

    hive的窗口函数 概述 hive中一般求取TopN时就需要用到窗口函数 专业窗口函数一般有三个 rank() over dense rank() over row_number() over 实例 ...

  6. 【Hadoop离线基础总结】HDFS的API操作

    HDFS的API操作 创建maven工程并导入jar包 注意 由于cdh版本的所有的软件涉及版权的问题,所以并没有将所有的jar包托管到maven仓库当中去,而是托管在了CDH自己的服务器上面,所以我 ...

  7. 超简单笔记本改造nas--一个萌新的摸爬滚打

    最近好久没更新,你们有没有想我啊(手动滑稽)咳咳,言归正传,如同标题,最近闲来无事,打算利用家里的闲置笔记本电脑搭建一个nas.**注意:本文不涉及群晖以及相关专业NAS服务供应商!!!**nas分两 ...

  8. 2018-07-01 jq效果

    jq效果的实现方法: 1.基本 show(time) -> 显示:相当于display:block hide(time) -> 隐藏:相当于display:none toggle(time ...

  9. Jmeter自动发送邮件

    自动发送邮件: 1.自动发送邮件,需要三个jar,分别是:activation.jar,commons-email-1.2.jar,mail.jar,这三个文件放在ant的lib目录下 2.报错 Ex ...

  10. goland pojie

    goland pojie 只适用于goland2019.1.3之前的版本,之后的版本没法支持. 1. 步骤 修改vm启动参数 激活正版 2. agent 网上有很多agent都是不能用的,我上传一个可 ...