虽然技术在进步,硬件也越来越物美价廉,但如今软件工程师仍需要关注程序的性能优化。本书将介绍软件效率问题、Go语言快速入门知识、如何实现高效编程,告诉大家如何高效进行性能优化,以及何时进行,并给出需要的工具和相关知识,让你使用较少的资源实现高效编程。
封面
书名页
版权
O'Reilly Media,Inc.介绍
中文版序
推荐序一
推荐序二
译者序
前言
第1章 软件效率很重要
1.1 性能的深意
1.2 效率的常见误区
1.2.1 误区1:优化后的代码可读性差
1.2.2 误区2:YAGNI原则
1.2.3 误区3:硬件变得更快、更廉价
1.2.4 误区4:使用水平扩展
1.2.5 误区5:尽快投入市场
1.3 效率优先
1.4 本章小结
第2章 初识Go语言
2.1 Go基础知识
2.1.1 Go语言形态
2.1.2 Go简化代码库
2.1.3 Go是谷歌的开源项目
2.1.4 核心设计原则
2.1.5 包和模块
2.1.6 Go如何管理依赖
2.1.7 一致的工具
2.1.8 错误处理
2.1.9 语言生态
2.1.10 移除未使用的import和变量
2.1.11 单元测试和表测试
2.2 高级语言元素
2.2.1 做好代码文档
2.2.2 向后兼容性和可移植性
2.2.3 Go运行时
2.2.4 面向对象编程
2.2.5 泛型
2.3 Go“快”吗
2.4 本章小结
第3章 征服效率
3.1 对“优化”的思考
3.1.1 合理的优化
3.1.2 慎重的优化
3.2 优化挑战
3.3 了解你的目标
3.3.1 应该形式化效率要求
3.3.2 资源感知的效率要求
3.3.3 获取和评估效率目标
3.3.4 定义RAER的示例
3.4 合理解决效率问题
3.5 优化设计层级
3.6 效率感知的开发流程
3.6.1 功能阶段
3.6.2 效率阶段
3.7 本章小结
第4章 Go如何使用CPU资源
4.1 现代计算机架构中的CPU
4.2 汇编语言
4.3 了解Go编译器
4.4 CPU和内存墙问题
4.4.1 分层缓存系统
4.4.2 流水线和乱序执行
4.4.3 超线程
4.5 调度器
4.5.1 操作系统调度器
4.5.2 Go运行时调度器
4.6 何时使用并发
4.7 本章小结
第5章 Go如何使用内存资源
5.1 内存的相关背景
5.2 是否有内存问题
5.3 物理内存
5.4 操作系统内存管理机制
5.4.1 虚拟内存
5.4.2 mmap系统调用
5.4.3 操作系统内存映射
5.5 Go内存管理机制
5.5.1 值、指针和内存块
5.5.2 Go内存分配器
5.5.3 垃圾收集
5.6 本章小结
第6章 效率可观测性
6.1 可观测性
6.2 针对延迟的插桩示例
6.2.1 日志
6.2.2 追踪
6.2.3 指标
6.3 效率指标语义
6.3.1 延迟
6.3.2 CPU使用情况
6.3.3 内存使用情况
6.4 本章小结
第7章 数据驱动的效率评估
7.1 复杂度分析
7.1.1 效率复杂度预估
7.1.2 渐近复杂度的近似预估
7.1.3 复杂度分析实践
7.2 基准测试的艺术
7.2.1 与功能测试的对比
7.2.2 基准测试谎言
7.3 实验的可靠性
7.3.1 人为错误
7.3.2 重现生产环境
7.3.3 性能的不确定性
7.4 基准测试级别
7.4.1 生产环境中的基准测试
7.4.2 宏基准测试
7.4.3 微基准测试
7.4.4 正确使用基准测试
7.5 本章小结
第8章 基准测试实践
8.1 微基准测试详述
8.1.1 Go基准测试
8.1.2 基准测试结果分析
8.2 微基准测试技巧
8.2.1 结果方差分析
8.2.2 确定工作流程
8.2.3 确保结果正确
8.2.4 分享基准测试
8.2.5 进行不同的基准测试
8.2.6 微基准测试与内存管理
8.2.7 微基准测试与编译器优化
8.3 宏基准测试详述
8.3.1 基础知识
8.3.2 Go e2e框架
8.3.3 理解并观测结果
8.4 常见的宏基准测试工作流程
8.5 本章小结
第9章 数据驱动的瓶颈分析
9.1 效率根因分析
9.2 Go中的性能剖析
9.2.1 pprof格式
9.2.2 go tool pprof报告
9.3 捕获性能剖析信号
9.4 常用性能剖析插桩
9.4.1 堆
9.4.2 goroutine
9.4.3 CPU
9.4.4 off-CPU时间
9.5 技巧
9.5.1 共享性能剖析
9.5.2 持续性能剖析
9.5.3 比较和聚合性能剖析
9.6 本章小结
第10章 优化示例
10.1 Sum示例
10.2 优化延迟
10.2.1 优化bytes.Split
10.2.2 优化runtime.slicebytetostring
10.2.3 优化strconv.Parse
10.3 优化内存使用
10.3.1 转向流式算法
10.3.2 优化bufio.Scanner
10.4 使用并发优化延迟
10.4.1 朴素的并发
10.4.2 分布式工作者模式
10.4.3 不需要协调的工作者模式(任务分片)
10.4.4 流式、分片的工作者模式
10.5 额外技巧:打破常规思维
10.6 本章小结
第11章 优化模式
11.1 常见模式
11.1.1 减少工作量
11.1.2 以功能换效率
11.1.3 以空间换时间
11.1.4 以时间换空间
11.2 3R优化法
11.2.1 减少分配
11.2.2 重用内存
11.2.3 回收
11.3 不要泄漏资源
11.3.1 控制goroutine的生命周期
11.3.2 可靠地关闭资源
11.3.3 耗尽资源
11.4 尽可能预分配
11.5 使用数组时过度使用内存
11.6 内存重用和池化
11.7 本章小结
11.8 后续计划
附录 延迟的粗略估算
关于作者
封面简介
封底
机械工业出版社 京icp备14043556号-1 (署)网出证(京)字第214号 Copyright (C) 2001 CmpBook. All Rights Reserved