Go性能调优 说明

# 前言

# Go性能调优 说明

《Go性能调优》是一本完备的资源书籍,书中包含经过验证的方法和技巧,可帮助你诊断并解决Go应用程序中的性能问题。本书开篇介绍性能相关概念,你将从中了解Go语言性能背后的理念。接下来,你会学习如何高效地实现Go语言的数据结构和算法,并探索数据操作与组织方式,以便编写可扩展软件的程序。用于实现并行和并发的通道(Channels)和协程(goroutines),也是编写分布式系统高性能代码的核心部分,这部分内容在本书中也有涉及。随后,你将学习如何有效地管理内存。你还会探索统一计算设备架构(Compute Unified Device Architecture,CUDA)驱动应用程序编程接口(API),学习使用容器构建Go代码,并利用Go构建缓存以加快编译速度。你将清晰了解如何对Go代码进行分析和追踪,从而检测系统中的瓶颈。在本书结尾,你将评估集群和作业队列以优化性能,并监控应用程序以防性能退化。

本文为《Hands-on high performance with Go》的译本,首发于 cppguide.cn (opens new window)

限于水平有限,如果您在阅读过程中有任何问题,可以联系小方(微信cppxiaofang),也欢迎加入小方的 技术交流群,群里面有很多技术高手,不定期发布招聘信息,加群请备注“加微信群”。

小方微信公众号【CppGuide】:

img

# 目标读者

本书是对Go编程有中高级理解、且有兴趣提升代码执行速度的开发者和专业人士的必备读物。

# 目录

  • 前言
  • 第一部分:Go语言性能学习
    • 第1章:Go语言性能入门
      • 技术要求
      • 理解计算机科学中的性能
        • 大O符号简要介绍
        • 衡量长期性能的方法
          • 优化策略概述
        • 优化级别
      • Go语言简史
        • Go标准库
        • Go工具集
          • 基准测试概述
      • Go语言性能背后的理念
      • 协程——从一开始就具备的性能优势
      • 通道——一种类型化的管道
      • 媲美C语言的性能
      • 大规模分布式系统
      • 总结
    • 第2章:数据结构与算法
      • 理解基准测试
        • 基准测试执行
        • 实际应用中的基准测试
      • 介绍大O符号
        • 大O符号的实际示例
        • 数据结构操作与时间复杂度
        • O(1)——常数时间
        • O(log n)——对数时间
        • O(n)——线性时间
        • O(n log n)——准线性时间
        • O(n²)——平方时间
        • O(2ⁿ)——指数时间
      • 理解排序算法
        • 插入排序
        • 堆排序
        • 归并排序
        • 快速排序
      • 理解搜索算法
        • 线性搜索
        • 二分搜索
      • 探索树结构
        • 二叉树
        • 双向链表
      • 探索队列
        • 常见队列模式
        • 常见队列函数
      • 总结
    • 第3章:理解并发
      • 理解闭包
        • 匿名函数
        • 与闭包相关的匿名函数
        • 用于嵌套和延迟工作的闭包
        • 带有闭包的HTTP处理程序
      • 探索协程(Goroutines)
        • Go调度器
        • Go调度器中协程的内部机制
          • M结构体
          • P结构体
          • G结构体
        • 协程的实际应用
      • 介绍通道(Channels)
        • 通道的内部机制
        • 带缓冲的通道
          • 遍历通道(Ranges over channels)
        • 无缓冲的通道
          • select语句
      • 信号量(Semaphores)介绍
      • 理解等待组(WaitGroups)
      • 迭代器与迭代过程
      • 生成器简介
      • 总结
    • 第4章:Go语言中的等效标准模板库算法
      • 理解标准模板库中的算法
        • 排序(Sort)
        • 反转(Reverse)
        • 最小元素和最大元素(Min element and max element)
        • 二分搜索(Binary search)
      • 理解容器
        • 序列容器
          • 数组(Array)
          • 双端队列(Deque)
          • 链表(List)
          • 单向列表(Forward list)
        • 容器适配器
          • 队列(Queue)
          • 优先队列(Priority queue)
          • 栈(Stack)
        • 关联容器
          • 集合(Set)
          • 多重集合(Multiset)
          • 映射(Map)
          • 多重映射(Multimap)
      • 理解函数对象
        • 仿函数(Functors)
        • 迭代器
          • 内部迭代器(Internal iterators)
          • 外部迭代器(External iterators)
          • 生成器(Generators)
          • 隐式迭代器(Implicit Iterators)
      • 总结
    • 第5章:Go语言中的矩阵和向量计算
      • 介绍Gonum和稀疏库(Sparse library)
      • 介绍基本线性代数子程序库(BLAS)
      • 介绍向量(Vectors)
        • 向量计算
      • 介绍矩阵(Matrices)
      • 矩阵运算
        • 矩阵加法
          • 实际示例(矩阵减法)
        • 标量乘法
        • 标量乘法实际示例
        • 矩阵乘法
        • 矩阵乘法实际示例
        • 矩阵转置
        • 矩阵转置实际示例
      • 理解矩阵结构
        • 稠密矩阵(Dense matrices)
        • 稀疏矩阵(Sparse matrices)
          • 基于字典的稀疏矩阵(DOK matrix)
          • 按行索引的链表稀疏矩阵(LIL matrix)
        • 坐标格式稀疏矩阵(COO matrix)
          • 压缩稀疏行矩阵(CSR matrix)
          • 压缩稀疏列矩阵(CSC matrix)
      • 总结
  • 第二部分:在Go语言中应用性能概念
    • 第6章:编写可读性强的Go代码
      • 保持Go代码的简洁性
      • 保持Go代码的可读性
      • 探索Go语言中的包(Packaging)
        • 包命名
        • 包布局
        • 内部包
        • 供应商目录(Vendor directory)
        • Go模块(Go modules)
      • 理解Go语言中的命名
      • 理解Go语言中的格式化
      • Go语言接口简介
      • 理解Go语言中的方法
      • 理解Go语言中的继承
      • 探索Go语言中的反射(Reflection)
        • 类型(Types)
        • 种类(Kinds)
        • 值(Values)
      • 总结
    • 第7章:Go语言中的模板编程
      • 理解Go generate
      • 用于Protocol Buffers的生成代码
      • Protocol Buffers代码结果
      • 链接工具链
      • 介绍用于配置编程的Cobra和Viper
      • Cobra/Viper的结果集
      • 文本模板(Text templating)
      • HTML模板(HTML templating)
      • 探索Sprig
        • 字符串函数
        • 字符串切片函数
        • 默认函数
      • 总结
    • 第8章:Go语言中的内存管理
      • 现代计算机内存理解——入门
      • 内存分配
      • 介绍虚拟内存大小(VSZ)和常驻集大小(RSS)
      • 理解内存利用
      • Go运行时内存分配
        • 内存分配入门
        • 内存对象分配
      • 有限内存情况简介
      • 总结
    • 第9章:Go语言中的GPU并行化
      • Cgo——在Go语言中编写C代码
        • 一个简单的Cgo示例
      • GPU加速计算——利用硬件
        • CUDA——利用主机进程
        • 用于支持GPU编程的Docker
      • 在谷歌云平台(GCP)上使用CUDA
        • 创建带GPU的虚拟机
        • 安装CUDA驱动程序
        • 在GCP上安装Docker社区版(Docker CE)
        • 在GCP上安装NVIDIA Docker
        • 将所有操作编写成脚本
      • CUDA——为程序提供赋能
      • 总结
    • 第10章:Go语言中的编译时评估
      • 探索Go运行时
        • GODEBUG
        • GCTRACE
        • GOGC
        • GOMAXPROCS
        • GOTRACEBACK
        • Go构建缓存
        • 管理依赖项(Vendoring dependencies)
        • 缓存和依赖项管理的改进
        • 调试(Debug)
        • PProf/race/trace
      • 理解函数
        • KeepAlive
        • NumCPU
        • ReadMemStats
      • 总结
  • 第三部分:部署、监控和迭代Go程序
    • 第11章:构建和部署Go代码
      • 构建Go二进制文件
        • Go build——构建你的Go代码
        • 构建标志(Build flags)
        • 构建信息
        • 编译器和链接器标志
        • 构建约束(Build constraints)
        • 文件名约定
        • Go clean——清理你的构建目录
      • 使用go get和go mod获取包依赖项
      • Go list
      • Go run——执行你的包
      • Go install——安装你的二进制文件
      • 使用Docker构建Go二进制文件
      • 总结
    • 第12章:分析Go代码性能
      • 理解性能分析(Profiling)
      • 探索检测方法(instrumentation methodologies)
        • 使用go test实现性能分析
        • 在代码中手动检测性能分析
        • 对运行中的服务代码进行性能分析
      • CPU性能分析简介
      • 内存性能分析简介
      • 上游pprof的扩展功能
      • 比较多个分析结果
      • 在pprof中解读火焰图
      • 检测Go语言中的内存泄漏
      • 总结
    • 第13章:跟踪Go代码
      • 实现跟踪检测
      • 理解跟踪格式
      • 理解跟踪收集
      • 跟踪窗口中的动态展示
      • 探索类似pprof的跟踪
      • Go分布式跟踪
      • 为你的应用程序实现OpenCensus
      • 总结
    • 第14章:集群和作业队列
      • Go语言中的集群
        • K近邻算法(K-nearest neighbors)
        • K均值聚类(K-means clustering)
      • 探索Go语言中的作业队列
        • 将协程用作作业队列
        • 将带缓冲的通道用作作业队列
        • 集成作业队列
          • Kafka
          • RabbitMQ
      • 总结
    • 第15章:跨版本比较代码质量
      • Go Prometheus导出器——从你的Go应用程序导出数据
      • 应用性能管理(APM)——监控分布式系统性能
        • 谷歌云环境设置
        • 谷歌云跟踪代码
      • 服务级别指标(SLIs)和服务级别目标(SLOs)——设定目标
        • 测量流量
        • 测量延迟
        • 测量错误
        • 测量饱和度
        • Grafana
      • 日志记录——跟踪数据
      • 总结
上次更新: 2026/07/14, 19:37:40

社区交流

讨论与留言

前往 GitHub Issues →

本留言区仅对应当前文章,欢迎补充观点、提出问题或帮助修正文中疏漏。 留言由 GitHub/Gitalk 提供,需要使用 GitHub 登录。

最近更新
第 1 课:专栏导论与安全边界
07-01
第 3 课:安装编译与调试环境
07-01
第 4 课:第三方库下载、编译与依赖管理
07-01
更多文章>