 5 刘知杭 静态类型的Python静态类型的Python Lyzh(刘知杭) 目录 CONTENTS 有关类型的概念 使用mypy对Python源 代码进行静态分析 代数数据类型 拓展知识 关于类型的一些基本概念 有类型不等于有类型系统 动态语言类型化的必要性 不久前的一个案例 正文 类型的概念 CPython定义了PyObject这个 结构体作为对象头。 CPython中的类型,是指在对 象头中指向类型元信息的指针。 象头中指向类型元信息的指针。 CPython有类型,但CPython没有类型系统。这就是CsPython中诸多问题的由来。 类型系统是什么? 类型系统(type system)的基本目标是防止程序在运行时发生类型错误。当且仅当语言运行时 不存在任何形式的类型错误,那么它就是sound的。soundness是类型系统研究的重要目标。 类型系统(type system)是一种编译期(Compile-time)的类型推导检查规则。 ime)的类型推导检查规则。 类型系统就是一种轻量级的形式化方法,它通常被植入编译器或程序分析器中进行自动校验。 从而让那些不熟悉底层理论的程序员也可以使用它们。 这类轻量级技术中还包括模型检测(Model checking),运行时验证(Runtime verification)和类型系统(Type system)等等。其中类型系统最流行,发展最完善。 在计算机科学中,形式化方法(Formal0 码力 | 42 页 | 6.87 MB | 1 年前3 5 刘知杭 静态类型的Python静态类型的Python Lyzh(刘知杭) 目录 CONTENTS 有关类型的概念 使用mypy对Python源 代码进行静态分析 代数数据类型 拓展知识 关于类型的一些基本概念 有类型不等于有类型系统 动态语言类型化的必要性 不久前的一个案例 正文 类型的概念 CPython定义了PyObject这个 结构体作为对象头。 CPython中的类型,是指在对 象头中指向类型元信息的指针。 象头中指向类型元信息的指针。 CPython有类型,但CPython没有类型系统。这就是CsPython中诸多问题的由来。 类型系统是什么? 类型系统(type system)的基本目标是防止程序在运行时发生类型错误。当且仅当语言运行时 不存在任何形式的类型错误,那么它就是sound的。soundness是类型系统研究的重要目标。 类型系统(type system)是一种编译期(Compile-time)的类型推导检查规则。 ime)的类型推导检查规则。 类型系统就是一种轻量级的形式化方法,它通常被植入编译器或程序分析器中进行自动校验。 从而让那些不熟悉底层理论的程序员也可以使用它们。 这类轻量级技术中还包括模型检测(Model checking),运行时验证(Runtime verification)和类型系统(Type system)等等。其中类型系统最流行,发展最完善。 在计算机科学中,形式化方法(Formal0 码力 | 42 页 | 6.87 MB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第四课 多元组, 结构体,枚举类型现代编程思想 多元组,结构体与枚举类型 Hongbo Zhang 1 基础数据类型:多元组与结构体 2 回顾:多元组 多元组:固定⻓度的不同类型数据的集合 定义: (<表达式>, <表达式>, ...) 类型: (<表达式类型>, <表达式类型>, ...) 例如: 身份信息: ("Bob", 2023, 10, 24): (String, Int, Int, Int) 成员访问: (2023, 10, 24).0 == 2023 列表:任意⻓度的相同类型数据的集合 例如: 字符的序列: Cons('H', Cons('i', Cons('!', Nil))) Cons : construct 的缩写 3 笛卡尔积 ⼀个多元组类型的元素即是每个组成类型的元素构成的有序元素组 集合的笛卡尔积,⼜称积类型 例:扑克牌的所有花⾊:{ } 4 结构体 元组的问题在于,难以理解其所代表的数据 address: String; postal: Int } 通过名称,我们能明确数据的信息以及对应字段的含义 5 结构体的定义 结构体的定义形如 struct <结构体名称> { <字段名>: <类型> ; ... } struct PersonalInfo { name: String; age: Int} 定义结构体的值时,形如 { <字段名>: <值> , ... } let info:0 码力 | 26 页 | 435.86 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第四课 多元组, 结构体,枚举类型现代编程思想 多元组,结构体与枚举类型 Hongbo Zhang 1 基础数据类型:多元组与结构体 2 回顾:多元组 多元组:固定⻓度的不同类型数据的集合 定义: (<表达式>, <表达式>, ...) 类型: (<表达式类型>, <表达式类型>, ...) 例如: 身份信息: ("Bob", 2023, 10, 24): (String, Int, Int, Int) 成员访问: (2023, 10, 24).0 == 2023 列表:任意⻓度的相同类型数据的集合 例如: 字符的序列: Cons('H', Cons('i', Cons('!', Nil))) Cons : construct 的缩写 3 笛卡尔积 ⼀个多元组类型的元素即是每个组成类型的元素构成的有序元素组 集合的笛卡尔积,⼜称积类型 例:扑克牌的所有花⾊:{ } 4 结构体 元组的问题在于,难以理解其所代表的数据 address: String; postal: Int } 通过名称,我们能明确数据的信息以及对应字段的含义 5 结构体的定义 结构体的定义形如 struct <结构体名称> { <字段名>: <类型> ; ... } struct PersonalInfo { name: String; age: Int} 定义结构体的值时,形如 { <字段名>: <值> , ... } let info:0 码力 | 26 页 | 435.86 KB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 10 从稀疏数据结构到量化数据类型从稀疏数据结构到量化数据类型 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 本课涵盖:稀疏矩阵、 unordered_map 、空间稀 疏网格、位运算、浮点的二进制格式、内存带宽优 化 面向人群:图形学、 >> 3 。 >> 2 = 位运算 >> 对负数的处理 signed 类型的 >> n 会把最高位复制 n 次。 因为补码的特性,这导致负数 >> 的结果仍是负 数。 这样就实现了和 Python 一样的始终向下取整除 法。 >> 2 = unsigned 类型的位运算 >> 不一样 而 unsigned 类型的 >> n 会不会复制最高位, 只是单纯的位移,这会导致负数的符号位单独被位 只是单纯的位移,这会导致负数的符号位单独被位 移,补码失效,造成结果不对。 unsigned 类型的 >> 会生成 shr 指令, signed 类型的 >> 会生成 sar 指令。 我们需要负方向无限延伸的稀疏数据结果,那就只 要 signed 那个就行。 >> 2 = 没有重合时可以用高效的加法:位运算 | • 如果可以保证 a 和 b 满足 a & b = 0 , 如: • 1011000 和 00001100 码力 | 102 页 | 9.50 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 10 从稀疏数据结构到量化数据类型从稀疏数据结构到量化数据类型 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 本课涵盖:稀疏矩阵、 unordered_map 、空间稀 疏网格、位运算、浮点的二进制格式、内存带宽优 化 面向人群:图形学、 >> 3 。 >> 2 = 位运算 >> 对负数的处理 signed 类型的 >> n 会把最高位复制 n 次。 因为补码的特性,这导致负数 >> 的结果仍是负 数。 这样就实现了和 Python 一样的始终向下取整除 法。 >> 2 = unsigned 类型的位运算 >> 不一样 而 unsigned 类型的 >> n 会不会复制最高位, 只是单纯的位移,这会导致负数的符号位单独被位 只是单纯的位移,这会导致负数的符号位单独被位 移,补码失效,造成结果不对。 unsigned 类型的 >> 会生成 shr 指令, signed 类型的 >> 会生成 sar 指令。 我们需要负方向无限延伸的稀疏数据结果,那就只 要 signed 那个就行。 >> 2 = 没有重合时可以用高效的加法:位运算 | • 如果可以保证 a 和 b 满足 a & b = 0 , 如: • 1011000 和 00001100 码力 | 102 页 | 9.50 MB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第五课 数据类型:树、二叉树、二叉搜索树、AVL树B-Tree:适合顺序访问,利于硬盘存储数据 R-Tree:存储空间⼏何结构 …… 8 数据结构:⼆叉树 ⼆叉树要么是⼀棵空树,要么是⼀个节点;它最多具有两个⼦树:左⼦树与右⼦树 叶节点的两个⼦树都是空树 基于递归枚举类型的定义(本节课默认存储数据为整数) 1. enum IntTree { 2. Node(Int, IntTree, IntTree) // 存储的数据,左⼦树,右⼦树 3. Empty 40 码力 | 29 页 | 1015.26 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第五课 数据类型:树、二叉树、二叉搜索树、AVL树B-Tree:适合顺序访问,利于硬盘存储数据 R-Tree:存储空间⼏何结构 …… 8 数据结构:⼆叉树 ⼆叉树要么是⼀棵空树,要么是⼀个节点;它最多具有两个⼦树:左⼦树与右⼦树 叶节点的两个⼦树都是空树 基于递归枚举类型的定义(本节课默认存储数据为整数) 1. enum IntTree { 2. Node(Int, IntTree, IntTree) // 存储的数据,左⼦树,右⼦树 3. Empty 40 码力 | 29 页 | 1015.26 KB | 1 年前3
 MoonBit月兔编程语言 现代编程思想 第三课 函数, 列表与递归	现代编程思想 函数, 列表与递归 Hongbo Zhang 1 基本数据类型:函数 2 函数 在数学上,描述对应关系的⼀种特殊集合 对于特定的输⼊,总是有特定的输出 在计算机中,对相同运算的抽象,避免⼤量重复定义 计算半径为1的圆的⾯积: 3.1415 * 1 * 1 计算半径为2的圆的⾯积: 3.1415 * 2 * 2 计算半径为3的圆的⾯积: 3.1415 * 3 * radius } 2. let result = (area(1.0), area(2.0), area(3.0)) 4 顶层函数的定义 fn <函数名> (<参数名>: <类型>, <参数名>: <类型>, ...) -> <类型> <表达式块> 定义的函数接⼝让其他使⽤者⽆需关注内部实现 1. fn one () -> Int { 2. 1 3. } 4. 5. fn add_char(ch: 当函数定义后,可以通过 <函数名>(<表达式>, <表达式>……) 的⽅式应⽤函数 one() add_char('m', "oonbit") 应⽤函数时,表达式与函数定义时的参数数量应当相同,且类型⼀⼀对应 这是错误的: add_char("oonbit", 'm') 计算应⽤函数的表达式时 从左到右计算定义了参数的表达式的值 替换函数内部参数 简化表达式 6 函数的应⽤与计算0 码力 | 42 页 | 587.59 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第三课 函数, 列表与递归	现代编程思想 函数, 列表与递归 Hongbo Zhang 1 基本数据类型:函数 2 函数 在数学上,描述对应关系的⼀种特殊集合 对于特定的输⼊,总是有特定的输出 在计算机中,对相同运算的抽象,避免⼤量重复定义 计算半径为1的圆的⾯积: 3.1415 * 1 * 1 计算半径为2的圆的⾯积: 3.1415 * 2 * 2 计算半径为3的圆的⾯积: 3.1415 * 3 * radius } 2. let result = (area(1.0), area(2.0), area(3.0)) 4 顶层函数的定义 fn <函数名> (<参数名>: <类型>, <参数名>: <类型>, ...) -> <类型> <表达式块> 定义的函数接⼝让其他使⽤者⽆需关注内部实现 1. fn one () -> Int { 2. 1 3. } 4. 5. fn add_char(ch: 当函数定义后,可以通过 <函数名>(<表达式>, <表达式>……) 的⽅式应⽤函数 one() add_char('m', "oonbit") 应⽤函数时,表达式与函数定义时的参数数量应当相同,且类型⼀⼀对应 这是错误的: add_char("oonbit", 'm') 计算应⽤函数的表达式时 从左到右计算定义了参数的表达式的值 替换函数内部参数 简化表达式 6 函数的应⽤与计算0 码力 | 42 页 | 587.59 KB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 性能优化之无分支编程 Branchless Programming,直到第二次又被打脸,下调到最初 的起点 50%…… 从汇编看 if-else jle .L2 :如果上一次 cmp 的结果为小于等于,则跳转到 .L2 jmp .L3 :无条件跳转到 .L3 归纳得出 if-else 转换成汇编后的固定格式 • if ( 条件 > 0) { // 大于才执行 A ,否则 B • 分支 A; • } else { • 分支 B; • } 0 更高效的写法 setle al :如果上一次 cmp 的结果为小于等于,则把 al 设为 1 ,否则设为 0 add eax, 1 :给 eax 加 1 ,也就是 eax=eax+1 的意思 归纳得出编译器对 if-else 的优化策略 • if ( 条件 > 0) { // jle • return 1; • } else { // jmp • return 这里 x > 0 返回的是一个 bool 类型(通过指令 setg al 求出) • bool 类型和 char 一样只占据 1 字节( al 寄存器就 1 字节) • 而 C 语言可以自动把 bool 转换成 int 类型( movzx 把 1 字节的 al 转换成 4 字节的 eax ,零扩展:高 3 字节 填充零) • 返回类型 int 占据 4 字节( eax 寄存器就是0 码力 | 47 页 | 8.45 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 性能优化之无分支编程 Branchless Programming,直到第二次又被打脸,下调到最初 的起点 50%…… 从汇编看 if-else jle .L2 :如果上一次 cmp 的结果为小于等于,则跳转到 .L2 jmp .L3 :无条件跳转到 .L3 归纳得出 if-else 转换成汇编后的固定格式 • if ( 条件 > 0) { // 大于才执行 A ,否则 B • 分支 A; • } else { • 分支 B; • } 0 更高效的写法 setle al :如果上一次 cmp 的结果为小于等于,则把 al 设为 1 ,否则设为 0 add eax, 1 :给 eax 加 1 ,也就是 eax=eax+1 的意思 归纳得出编译器对 if-else 的优化策略 • if ( 条件 > 0) { // jle • return 1; • } else { // jmp • return 这里 x > 0 返回的是一个 bool 类型(通过指令 setg al 求出) • bool 类型和 char 一样只占据 1 字节( al 寄存器就 1 字节) • 而 C 语言可以自动把 bool 转换成 int 类型( movzx 把 1 字节的 al 转换成 4 字节的 eax ,零扩展:高 3 字节 填充零) • 返回类型 int 占据 4 字节( eax 寄存器就是0 码力 | 47 页 | 8.45 MB | 1 年前3
 2022年美团技术年货 合辑器的多特征因子(模型 pCTR 预估值、隐层表征)进行融合: 算法 < 41 图 3 多层级多因子模型融合 具体地,如上图 3 所示。第一层级的目的是构建出有差异性的单个模型,主要通过不 同类型的模型在用户最近行为、全部行为数据以及不同特征集合上分别进行训练,来 产生差异性。第二层级则通过不同单个模型的组合进一步产生差异性,差异性的提升 来源于两个方面,分别是模型组合方式的不同(用不同模型,根据单模型特征进行打 多类别层次化图模型优化: (1)候选图模型的生成:现实世界中的图通常是多种属性的组合,这些属性信息很难 只用一种方法捕捉完全,因此,我们使用了基于谱域、空域、Attention 机制等多种 不同类型的模型来捕捉多种属性关系。不同模型在不同数据集上效果差异较大,为了 防止后续模型融合时加入效果较差的模型,会对 GCN、GAT、APPNP、TAGC、 DNA、GraphSAGE、GraphMix、Grand、GCNII (1)完善支持当前流行的图神经网络模型。 从图本身的类型来看,图神经网络模型可以分为同质图 (Homogeneous Graph)、 异质图 (Heterogeneous Graph)、动态图 (Dynamic Graph) 等类型。从训练方式 来看,又可以分为全图消息传递 [4] 和基于子图采样的消息传递 [8] 等类型。从推理方 式来看,还可以分为直推式和归纳式 [9]。 除此之外,下游任务除了经0 码力 | 1356 页 | 45.90 MB | 1 年前3 2022年美团技术年货 合辑器的多特征因子(模型 pCTR 预估值、隐层表征)进行融合: 算法 < 41 图 3 多层级多因子模型融合 具体地,如上图 3 所示。第一层级的目的是构建出有差异性的单个模型,主要通过不 同类型的模型在用户最近行为、全部行为数据以及不同特征集合上分别进行训练,来 产生差异性。第二层级则通过不同单个模型的组合进一步产生差异性,差异性的提升 来源于两个方面,分别是模型组合方式的不同(用不同模型,根据单模型特征进行打 多类别层次化图模型优化: (1)候选图模型的生成:现实世界中的图通常是多种属性的组合,这些属性信息很难 只用一种方法捕捉完全,因此,我们使用了基于谱域、空域、Attention 机制等多种 不同类型的模型来捕捉多种属性关系。不同模型在不同数据集上效果差异较大,为了 防止后续模型融合时加入效果较差的模型,会对 GCN、GAT、APPNP、TAGC、 DNA、GraphSAGE、GraphMix、Grand、GCNII (1)完善支持当前流行的图神经网络模型。 从图本身的类型来看,图神经网络模型可以分为同质图 (Homogeneous Graph)、 异质图 (Heterogeneous Graph)、动态图 (Dynamic Graph) 等类型。从训练方式 来看,又可以分为全图消息传递 [4] 和基于子图采样的消息传递 [8] 等类型。从推理方 式来看,还可以分为直推式和归纳式 [9]。 除此之外,下游任务除了经0 码力 | 1356 页 | 45.90 MB | 1 年前3
 Idris 语言文档 Version 1.3.1在传统编程语言中,类 类 类型 型 型 与 值 值 值 之间有明确的区分。例如在 奈奡女 奫 奥 奬 奬 中夬 下面这些类型分别表示整数、 字符、字符列表 以及任意值的列表: • Int夬 Char夬 [Char]夬 [a] 与此对应,下面这些值分别为上述类型的成员: • 42夬 ’a’夬 "Hello world!"夬 [2,3,4,5,6] 然而,在带有 依 依 依赖 赖 赖类 类 类型 型 型( ( e ) ) ) 的语言中,它们的区别并不明显。 依赖类型允许类型 「依赖」于值,换句话说,类型是 一 一 一等 等 等( ( (F i r s t - C l as s ) ) ) 的语言构造, 即它可以像值一样进行操作。 标准范例就是带长度的列表类型1 Vect n a, 其中 a 为元素的类型,而 n 为该列表的长度且可以任意 长。 当类型包含了描述其性质的值(如列表的长度)时,它就能描述函数自身的性质了。 比如连接两个列 表的操作,它拥有性质:结果列表的长度为两个输入列表的长度之和。 因此我们可以为 app 函数赋予 如下类型,它用于连接向量(奖奥 奣 奴 奯奲 ): app : Vect n a -> Vect m a -> Vect (n + m) a 1 也许会令人困惑,它在依赖类型编程的文献中通常被称作「向量 ( V e c t o r ) 」。 夲 I d r i s 语 语 语言 言 言文0 码力 | 224 页 | 2.06 MB | 1 年前3 Idris 语言文档 Version 1.3.1在传统编程语言中,类 类 类型 型 型 与 值 值 值 之间有明确的区分。例如在 奈奡女 奫 奥 奬 奬 中夬 下面这些类型分别表示整数、 字符、字符列表 以及任意值的列表: • Int夬 Char夬 [Char]夬 [a] 与此对应,下面这些值分别为上述类型的成员: • 42夬 ’a’夬 "Hello world!"夬 [2,3,4,5,6] 然而,在带有 依 依 依赖 赖 赖类 类 类型 型 型( ( e ) ) ) 的语言中,它们的区别并不明显。 依赖类型允许类型 「依赖」于值,换句话说,类型是 一 一 一等 等 等( ( (F i r s t - C l as s ) ) ) 的语言构造, 即它可以像值一样进行操作。 标准范例就是带长度的列表类型1 Vect n a, 其中 a 为元素的类型,而 n 为该列表的长度且可以任意 长。 当类型包含了描述其性质的值(如列表的长度)时,它就能描述函数自身的性质了。 比如连接两个列 表的操作,它拥有性质:结果列表的长度为两个输入列表的长度之和。 因此我们可以为 app 函数赋予 如下类型,它用于连接向量(奖奥 奣 奴 奯奲 ): app : Vect n a -> Vect m a -> Vect (n + m) a 1 也许会令人困惑,它在依赖类型编程的文献中通常被称作「向量 ( V e c t o r ) 」。 夲 I d r i s 语 语 语言 言 言文0 码力 | 224 页 | 2.06 MB | 1 年前3
 Java 应用与开发 - 面向对象编程进阶 PART1System.out.println("In␣class␣Test, 5 ␣␣␣␣method␣m1␣is␣running!"); 6 } 7 } package 语句对所在源文件中定义的所有类型(包括接口、枚举、 注解)均起作用。 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 包的创建 Java 编译器把包对应于文件系统的目录管理,package 语句中, this 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 什么是继承? 继承(Inheritance)是面向对象编程的核心机制之一,其本质是 在已有类型基础之上进行扩充或改造,得到新的数据类型,以满 足新的需要。 根据需要定义 Java 类描述“人”和“学生”信息: CODE ± Class Person 1 public class Person { 2 public 重新定义, 此称方法重写(Override)或覆盖。 O 语法规则 ▶ 重写方法必须和被重写方法具有相同的方法名称、参数列表 和返回值类型; ▶ 重写方法不能使用比被重写方法更严格的访问权限; ▶ 重写方法不允许声明抛出比被重写方法范围更大的异常 类型。 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 方法重写示例 CODE ± 方法重写示例 A 1 public0 码力 | 39 页 | 614.13 KB | 1 年前3 Java 应用与开发 - 面向对象编程进阶 PART1System.out.println("In␣class␣Test, 5 ␣␣␣␣method␣m1␣is␣running!"); 6 } 7 } package 语句对所在源文件中定义的所有类型(包括接口、枚举、 注解)均起作用。 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 包的创建 Java 编译器把包对应于文件系统的目录管理,package 语句中, this 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 什么是继承? 继承(Inheritance)是面向对象编程的核心机制之一,其本质是 在已有类型基础之上进行扩充或改造,得到新的数据类型,以满 足新的需要。 根据需要定义 Java 类描述“人”和“学生”信息: CODE ± Class Person 1 public class Person { 2 public 重新定义, 此称方法重写(Override)或覆盖。 O 语法规则 ▶ 重写方法必须和被重写方法具有相同的方法名称、参数列表 和返回值类型; ▶ 重写方法不能使用比被重写方法更严格的访问权限; ▶ 重写方法不允许声明抛出比被重写方法范围更大的异常 类型。 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 方法重写示例 CODE ± 方法重写示例 A 1 public0 码力 | 39 页 | 614.13 KB | 1 年前3
 对 Go 程序进行可靠的性能测试Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 教科书式的性能测试方法论 3 在《Software Testing: Principles and Practices》一书中归纳的性能测试方法论: 1. 搜集需求 2. 编写测试用例 3. 自动化性能测试用例 4. 执行性能测试用例 5. 分析性能测试结果 6. 性能调优 7. 性能基准测试(Performance 硬件:CPU 型号、温度、IO 等 ● 软件:操作系统版本、当前系统调度的负载等 指导思想 ● 单次测量结果毫无意义,统计意义下可对比的结果是关键 ○ 分析测试的场景、多次测量、决定统计检验的类型 ● 可对比的结果是在可控的环境下得到的 ○ 笔记本电脑 CPU 的执行效率受电源管理等因素影响,连续测试同一段代码可能先得到短暂的性 能提升,而后由于温度的上升导致性能下降 ○ 虚拟机或(共 [more.txt ...] options: -alpha α 设置显著性水平 α 的值(默认 0.05) -delta-test test 设置显著性检验的类型,支持 utest/ttest/none(默认 utest) -geomean 输出几何平均值 -sort order 对结果进行排序: [-]delta, [-]name0 码力 | 37 页 | 1.23 MB | 1 年前3 对 Go 程序进行可靠的性能测试Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 教科书式的性能测试方法论 3 在《Software Testing: Principles and Practices》一书中归纳的性能测试方法论: 1. 搜集需求 2. 编写测试用例 3. 自动化性能测试用例 4. 执行性能测试用例 5. 分析性能测试结果 6. 性能调优 7. 性能基准测试(Performance 硬件:CPU 型号、温度、IO 等 ● 软件:操作系统版本、当前系统调度的负载等 指导思想 ● 单次测量结果毫无意义,统计意义下可对比的结果是关键 ○ 分析测试的场景、多次测量、决定统计检验的类型 ● 可对比的结果是在可控的环境下得到的 ○ 笔记本电脑 CPU 的执行效率受电源管理等因素影响,连续测试同一段代码可能先得到短暂的性 能提升,而后由于温度的上升导致性能下降 ○ 虚拟机或(共 [more.txt ...] options: -alpha α 设置显著性水平 α 的值(默认 0.05) -delta-test test 设置显著性检验的类型,支持 utest/ttest/none(默认 utest) -geomean 输出几何平均值 -sort order 对结果进行排序: [-]delta, [-]name0 码力 | 37 页 | 1.23 MB | 1 年前3
共 443 条
- 1
- 2
- 3
- 4
- 5
- 6
- 45














 
 