Go性能优化概览-曹春晖业务性能优化概览 By Xargin 《Go 语⾔⾼级编程》合著者 Go contributor ⽬ 录 优化的前置知识 01 ⽣产环境的优化 02 Continuous profiling 03 优化的前置知识 第⼀部分 Latency numbers every programmer should know https://colin-scott.github.io/p go#L930 内存占⽤过⾼-堆分配导致内存过⾼ https://github.com/golang/go/pull/42036#issuecomment-715046540 怎么样说服官⽅接受性能优化的 PR 内存占⽤过⾼-goroutine 数量太多导致内存占⽤⾼ 这些内存的构成部分: 1. Goroutine 栈占⽤的内存(难优化,⼀条 tcp 连接⾄少对应⼀个 goroutine)0 码力 | 40 页 | 8.69 MB | 1 年前3
对 Go 程序进行可靠的性能测试对 Go 程序进行可靠的性能测试 Changkun Ou https://changkun.de/s/gobench/ Go 夜读系列 |talkgo.org|Talk Go|第 83 期 March 26, 2020 # Go 1.13 / 1.14 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 主要内容 ● 可靠的测试环境 ● benchstat 对代码块进行性能调优 ○ 例2: Benchmark 的正确性分析 ○ 例3: 其他的影响因素 ● 假设检验的原理 ● 局限与应对措施 ● 总结 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 教科书式的性能测试方法论 3 在《Software Testing: Principles and Practices》一书中归纳的性能测试方法论: 搜集需求 2. 编写测试用例 3. 自动化性能测试用例 4. 执行性能测试用例 5. 分析性能测试结果 6. 性能调优 7. 性能基准测试(Performance Benchmarking) 8. 向客户推荐合适的配置 可靠的测试环境 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 什么是可靠的性能基准测试环境 5 影响测试环境的软硬件因素0 码力 | 37 页 | 1.23 MB | 1 年前3
2.7 Golang与高性能DSP竞价系统专业DSP解决⽅方案供应商 Golang与⾼高性能DSP竞价系统 By @QLeelulu 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • RTB: Real-time Bidding,实时竞价,允许⼲⼴广告买家根据 活动⺫⽬目标、⺫⽬目标⼈人群以及费⽤用⻔门槛等因素对每⼀一个⼲⼴广告 及每次⼲⼴广告展⽰示的费⽤用进⾏行竞价。 http包的HelloWorld性能测试 为什么选择Golang Via: http://www.cnblogs.com/QLeelulu/archive/2012/08/12/2635261.html 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • ⾼高性能、天⽣生并发⽀支持 • 性能敏感的模块可以直接使⽤用C编写(当时是这么认为的) 性能敏感的模块可以直接使⽤用C编写(当时是这么认为的) • 编译为本地机器码,部署⽅方便 • 快速上⼿手,学习成本低 • 标准库基本够⽤用 • 带GC(当时不了解GC的性能问题) • ⾃自带单元测试、性能测试、性能分析⼯工具 • 开发效率不低 为什么选择Golang 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved0 码力 | 51 页 | 5.09 MB | 1 年前3
IPC性能极致优化方案-RPAL落地实践IPC性能极致优化方案-RPAL落地实践 谢正尧 字节跳动 研发工程师 目 录 方案诞生的背景 01 全进程地址空间共享与保护 02 用户态进程切换 03 高效的Go Event Poller 04 RPC框架Kitex集成 05 性能收益与业务展望 06 方案诞生的背景 第一部分 方案诞生的背景 几种常见的同机通信场景: 1. 微服务合并部署(亲和性部署、sidecar 常见的本地通信方案:回环 IP、UDS、共享内存IPC 方案诞生的背景 以性能较优的 IPC 方案 share memory ipc 为例分析性能瓶颈: 注:方案 github 地址:https://github.com/cloudwego/shmipc-go 方案诞生的背景 方案诞生的背景 IPC 的性能瓶颈有哪些: 1. 系统特权级切换; 2. 异步线程唤醒/休眠(事件通知); 异步线程唤醒/休眠(事件通知); 3. 数据拷贝(序列化/反序列化); 方案诞生的背景 能不能把库函数调用的高性能优势做到 IPC 里面,降低进程间的事件通知和数据拷贝开销? 以go-go微服务 RPC 通信场景为例,该问题可以抽象为,如何高效地在两个 go runtime 间进行函数调用? 方案诞生的背景 基于以上问题,我们最终引入了 RPAL(Run Process As Library) 方案,基于跨进程虚拟地址0 码力 | 39 页 | 2.98 MB | 1 年前3
大规模高性能区块链架构设计模式与测试框架-李世敬大规模高性能区块链架构 设计模式与测试框架 Gopher Meetup 深圳站 2021 年 8 ⽉ 21 号 趣�科技 李世敬 目录 区块链概述 01 大规模高性能区块链架构设计介绍 02 基于Go插件的区块链性能测试工具 03 写在最后 04 区块链概述 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 ⼊要求。且⾮许可链⽹络节点⼤都由业务相关的机构组成,造成架构上共识、合约、安全、权限等⽅⾯的不同 �可�架构 大规模高性能区块链架构设计介绍 15 趣链科技 版权所有 ©2016-2021 ⼤�模⾼性能区��架构⾯�的�� 大规模高性能 区块链架构设计 网络连通问题 数据孤岛问题 异构部署问题 性能扩展问题 之困局 ? n 机构间数据难打通,不愿打通 n 公网内网、网关网闸情况复杂 n 业务组织形式不同,异构链/系统难适配 Edge Layer 轻节点层 Gateway Layer 核⼼技术 多类型节点分层部署模式 1 3 动态⾃发现⽹络转发模型 2 ⼤规模组⽹⾼效共识算法 1.提⾼数据处理效率 2.提升终端异构性能⼒ 3.提供实时计算与验证服务 4.解决数据真实性“第⼀公⾥” 问题 ⾯向海量节点⼤规模应⽤场景, ⽀持1000+节点的⽣产级联盟链⽹络, 可以实现数⼗万个多类型区块链⽹络节点分层部署 技术简介0 码力 | 39 页 | 56.58 MB | 1 年前3
Go读书会第二期!= nil • Panic 不是错误处理 错误处理:保守与创新 Part8 – 编程实践:测试、调试与性能剖析 践行哲学,遵循惯例,认清本质,理解原理 • Go 测试惯例与组织形式 • 模糊测试 (fuzzing test) • 性能基准测试、度量数据与 pprof 剖析 • 调试实践 聚焦编码之外的 Go 工具链使用实践 Part9 – 标准库、反射与 cgo 践行哲学,遵循惯例,认清本质,理解原理0 码力 | 26 页 | 4.55 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版具有可行性,可在有限步骤、有限时间、有限内存空间下完成。 ‧ 独立于编程语言,即可用多种语言实现。 1.2.2. 数据结构定义 「数据结构 Data Structure」是在计算机中组织与存储数据的方式。为了提高数据存储和操作性能,数据结构 的设计原则有: ‧ 空间占用尽可能小,节省计算机内存。 ‧ 数据操作尽量快,包括数据访问、添加、删除、更新等。 1. 引言 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 的最直接的方式,就是找一台计算机,把两个算法都完整跑一遍,并监控记录运行时间和内存占用情况。这种 评估方式能够反映真实情况,但是也存在很大的硬伤。 难以排除测试环境的干扰因素。硬件配置会影响到算法的性能表现。例如,在某台计算机中,算法 A 比算法 B 运行时间更短;但换到另一台配置不同的计算机中,可能会得到相反的测试结果。这意味着我们需要在各种机 器上展开测试,而这是不现实的。 展开完整测试非 少空间,而是给出一种“趋势性 分析”; 复杂度分析克服了实际测试方法的弊端。一是独立于测试环境,分析结果适用于所有运行平台。二是可以体现 不同数据量下的算法效率,尤其是可以反映大数据量下的算法性能。 如果感觉对复杂度分析的概念一知半解,无需担心,后续章节会展开介绍。 2.1.3. 复杂度分析重要性 复杂度分析给出一把评价算法效率的“标尺”,告诉我们执行某个算法需要多少时间和空间资源,也让我们可0 码力 | 202 页 | 15.73 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版‧ 各步骤都有确定的含义,相同的输入和运行条件下,输出始终相同。 1.2.2. 数据结构定义 「数据结构 Data Structure」是计算机中组织和存储数据的方式。为了提高数据存储和操作性能,数据结构 的设计目标包括: ‧ 空间占用尽量减少,节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 1. 初识算法 hello‑algo.com 10 ‧ 提 们最直接的 方法就是找一台计算机,运行这两个算法,并监控记录它们的运行时间和内存占用情况。这种评估方式能够 反映真实情况,但也存在较大局限性。 难以排除测试环境的干扰因素。硬件配置会影响算法的性能表现。例如,在某台计算机中,算法 A 的运行时 间比算法 B 短;但在另一台配置不同的计算机中,我们可能得到相反的测试结果。这意味着我们需要在各种 机器上进行测试,而这是不现实的。 展开完整测 势,而非具体的运行时间或占用空间。 复杂度分析克服了实际测试方法的弊端。首先,它独立于测试环境,因此分析结果适用于所有运行平台。其 次,它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。 如果你对复杂度分析的概念仍感到困惑,无需担心,我们会在后续章节详细介绍。 2.1.3. 复杂度分析重要性 复杂度分析为我们提供了一把评估算法效率的“标尺”,告诉我们执行某个算法所需的时间和空间资源,并使0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.1.0 Go版的方法 是找一台计算机,运行这两个算法,并监控记录它们的运行时间和内存占用情况。这种评估方式能够反映真 实情况,但也存在较大的局限性。 一方面,难以排除测试环境的干扰因素。硬件配置会影响算法的性能。比如在某台计算机中,算法 A 的运行 时间比算法 B 短;但在另一台配置不同的计算机中,可能得到相反的测试结果。这意味着我们需要在各种机 器上进行测试,统计平均效率,而这是不现实的。 另一方 在以下两个方面。 ‧ 它独立于测试环境,分析结果适用于所有运行平台。 第 2 章 复杂度分析 hello‑algo.com 19 ‧ 它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。 Tip 如果你仍对复杂度的概念感到困惑,无须担心,我们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 维 方式。 ‧ 从数据结构角度看,递归天然适合处理链表、树和图的相关问题,因为它们非常适合用分治思想进行分 析。 2.2.3 两者对比 总结以上内容,如表 2‑1 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版的方法 是找一台计算机,运行这两个算法,并监控记录它们的运行时间和内存占用情况。这种评估方式能够反映真 实情况,但也存在较大的局限性。 一方面,难以排除测试环境的干扰因素。硬件配置会影响算法的性能。比如在某台计算机中,算法 A 的运行 时间比算法 B 短;但在另一台配置不同的计算机中,可能得到相反的测试结果。这意味着我们需要在各种机 器上进行测试,统计平均效率,而这是不现实的。 另一方 在以下两个方面。 ‧ 它独立于测试环境,分析结果适用于所有运行平台。 第 2 章 复杂度分析 hello‑algo.com 19 ‧ 它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。 � 如果你仍对复杂度的概念感到困惑,无须担心,我们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 维 方式。 ‧ 从数据结构角度看,递归天然适合处理链表、树和图的相关问题,因为它们非常适合用分治思想进行分 析。 2.2.3 两者对比 总结以上内容,如表 2‑1 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销0 码力 | 382 页 | 17.60 MB | 1 年前3
共 56 条
- 1
- 2
- 3
- 4
- 5
- 6













