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】:
# 目标读者
本书是对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)
- 总结
- 第1章:Go语言性能入门
- 第二部分:在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——为程序提供赋能
- 总结
- Cgo——在Go语言中编写C代码
- 第10章:Go语言中的编译时评估
- 探索Go运行时
- GODEBUG
- GCTRACE
- GOGC
- GOMAXPROCS
- GOTRACEBACK
- Go构建缓存
- 管理依赖项(Vendoring dependencies)
- 缓存和依赖项管理的改进
- 调试(Debug)
- PProf/race/trace
- 理解函数
- KeepAlive
- NumCPU
- ReadMemStats
- 总结
- 探索Go运行时
- 第6章:编写可读性强的Go代码
- 第三部分:部署、监控和迭代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二进制文件
- 总结
- 构建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
- 总结
- Go语言中的集群
- 第15章:跨版本比较代码质量
- Go Prometheus导出器——从你的Go应用程序导出数据
- 应用性能管理(APM)——监控分布式系统性能
- 谷歌云环境设置
- 谷歌云跟踪代码
- 服务级别指标(SLIs)和服务级别目标(SLOs)——设定目标
- 测量流量
- 测量延迟
- 测量错误
- 测量饱和度
- Grafana
- 日志记录——跟踪数据
- 总结
- 第11章:构建和部署Go代码
上次更新: 2025/04/08, 19:40:35