Go语言高效编程:原理、可观测性与优化
Go语言高效编程:原理、可观测性与优化
Bartlomiej Plotka
叶志远, 彭彪, 陈坤云, 魏星 译
出版时间:2025年01月
页数:397
“这是一本精彩而深刻的书,它将改变你对Go软件效率的看法。你将学到如何通过优化代码库和识别可优化模式来进行数据驱动的评估。本书能引导你轻松上手,并使你在编写代码时养成注重效率的习惯!”
——Saswata Mukherjee
Red Hat工程师
随着计算机技术的飞速发展、市场竞争的加剧和系统复杂性的提高,软件工程师往往会无视软件效率这个话题。然而,以可观测性为导向的性能优化在为产品节省资金和确保业务成功方面仍然至关重要。
借助此书,任何工程师都可以学习如何有效、专业、轻松地提升软件效率。本书为我们提供了能让系统运行得更快、更省资源的必要工具和知识。此外,本书的大部分内容适用于任何编程语言,你可以将一些小而有效的习惯融入你的编程或产品管理周期中。
通过阅读本书,你将了解到:
● 如何明确并制定效率目标。
● 如何在不同层面提升效率。
● 如何高效利用CPU和内存等常见资源。
● 如何使用Metrics、Logging、Tracing和Profiling等可观测性信号评估效率,并通过Prometheus、Jaeger和Parca等开源项目进行分析。
● 如何应用go test、pprof、benchstat和k6等工具来创建可靠的微基准和宏基准。
● 如何高效使用Go及其特性,如切片、泛型、协程、内存分类、垃圾回收等。
  1. 前言
  2. 第1章 软件效率很重要
  3. 1.1 性能的深意
  4. 1.2 效率的常见误区
  5. 1.2.1 误区1:优化后的代码可读性差
  6. 1.2.2 误区2:YAGNI原则
  7. 1.2.3 误区3:硬件变得更快、更廉价
  8. 1.2.4 误区4:使用水平扩展
  9. 1.2.5 误区5:尽快投入市场
  10. 1.3 效率优先
  11. 1.4 本章小结
  12. 第2章 初识Go语言
  13. 2.1 Go基础知识
  14. 2.1.1 Go语言形态
  15. 2.1.2 Go简化代码库
  16. 2.1.3 Go是谷歌的开源项目
  17. 2.1.4 核心设计原则
  18. 2.1.5 包和模块
  19. 2.1.6 Go如何管理依赖
  20. 2.1.7 一致的工具
  21. 2.1.8 错误处理
  22. 2.1.9 语言生态
  23. 2.1.10 移除未使用的import和变量
  24. 2.1.11 单元测试和表测试
  25. 2.2 高级语言元素
  26. 2.2.1 做好代码文档
  27. 2.2.2 向后兼容性和可移植性
  28. 2.2.3 Go运行时
  29. 2.2.4 面向对象编程
  30. 2.2.5 泛型
  31. 2.3 Go“快”吗
  32. 2.4 本章小结
  33. 第3章 征服效率
  34. 3.1 对“优化”的思考
  35. 3.1.1 合理的优化
  36. 3.1.2 慎重的优化
  37. 3.2 优化挑战
  38. 3.3 了解你的目标
  39. 3.3.1 应该形式化效率要求
  40. 3.3.2 资源感知的效率要求
  41. 3.3.3 获取和评估效率目标
  42. 3.3.4 定义RAER的示例
  43. 3.4 合理解决效率问题
  44. 3.5 优化设计层级
  45. 3.6 效率感知的开发流程
  46. 3.6.1 功能阶段
  47. 3.6.2 效率阶段
  48. 3.7 本章小结
  49. 第4章 Go如何使用CPU资源
  50. 4.1 现代计算机架构中的CPU
  51. 4.2 汇编语言
  52. 4.3 了解Go编译器
  53. 4.4 CPU和内存墙问题
  54. 4.4.1 分层缓存系统
  55. 4.4.2 流水线和乱序执行
  56. 4.4.3 超线程
  57. 4.5 调度器
  58. 4.5.1 操作系统调度器
  59. 4.5.2 Go运行时调度器
  60. 4.6 何时使用并发
  61. 4.7 本章小结
  62. 第5章 Go如何使用内存资源
  63. 5.1 内存的相关背景
  64. 5.2 是否有内存问题
  65. 5.3 物理内存
  66. 5.4 操作系统内存管理机制
  67. 5.4.1 虚拟内存
  68. 5.4.2 mmap系统调用
  69. 5.4.3 操作系统内存映射
  70. 5.5 Go内存管理机制
  71. 5.5.1 值、指针和内存块
  72. 5.5.2 Go内存分配器
  73. 5.5.3 垃圾收集
  74. 5.6 本章小结
  75. 第6章 效率可观测性
  76. 6.1 可观测性
  77. 6.2 针对延迟的插桩示例
  78. 6.2.1 日志
  79. 6.2.2 追踪
  80. 6.2.3 指标
  81. 6.3 效率指标语义
  82. 6.3.1 延迟
  83. 6.3.2 CPU使用情况
  84. 6.3.3 内存使用情况
  85. 6.4 本章小结
  86. 第7章 数据驱动的效率评估
  87. 7.1 复杂度分析
  88. 7.1.1 效率复杂度预估
  89. 7.1.2 渐近复杂度的近似预估
  90. 7.1.3 复杂度分析实践
  91. 7.2 基准测试的艺术
  92. 7.2.1 与功能测试的对比
  93. 7.2.2 基准测试谎言
  94. 7.3 实验的可靠性
  95. 7.3.1 人为错误
  96. 7.3.2 重现生产环境
  97. 7.3.3 性能的不确定性
  98. 7.4 基准测试级别
  99. 7.4.1 生产环境中的基准测试
  100. 7.4.2 宏基准测试
  101. 7.4.3 微基准测试
  102. 7.4.4 正确使用基准测试
  103. 7.5 本章小结
  104. 第8章 基准测试实践
  105. 8.1 微基准测试详述
  106. 8.1.1 Go基准测试
  107. 8.1.2 基准测试结果分析
  108. 8.2 微基准测试技巧
  109. 8.2.1结果方差分析
  110. 8.2.2 确定工作流程
  111. 8.2.3 确保结果正确
  112. 8.2.4 分享基准测试
  113. 8.2.5 进行不同的基准测试
  114. 8.2.6 微基准测试与内存管理
  115. 8.2.7 微基准测试与编译器优化
  116. 8.3 宏基准测试详述
  117. 8.3.1 基础知识
  118. 8.3.2 Go e2e框架
  119. 8.3.3 理解并观测结果
  120. 8.4 常见的宏基准测试工作流程
  121. 8.5 本章小结
  122. 第9章 数据驱动的瓶颈分析
  123. 9.1 效率根因分析
  124. 9.2 Go中的性能剖析
  125. 9.2.1 pprof格式
  126. 9.2.2 go tool pprof报告
  127. 9.3 捕获性能剖析信号
  128. 9.4 常用性能剖析插桩
  129. 9.4.1 堆
  130. 9.4.2 goroutine
  131. 9.4.3 CPU
  132. 9.4.4 off-CPU时间
  133. 9.5 技巧
  134. 9.5.1 共享性能剖析
  135. 9.5.2 持续性能剖析
  136. 9.5.3 比较和聚合性能剖析
  137. 9.6 本章小结
  138. 第10章 优化示例
  139. 10.1 Sum示例
  140. 10.2 优化延迟
  141. 10.2.1 优化bytes.Split
  142. 10.2.2 优化runtime.slicebytetostring
  143. 10.2.3 优化strconv.Parse
  144. 10.3 优化内存使用
  145. 10.3.1 转向流式算法
  146. 10.3.2 优化bufio.Scanner
  147. 10.4 使用并发优化延迟
  148. 10.4.1 朴素的并发
  149. 10.4.2 分布式工作者模式
  150. 10.4.3 不需要协调的工作者模式(任务分片)
  151. 10.4.4 流式、分片的工作者模式
  152. 10.5 额外技巧:打破常规思维
  153. 10.6 本章小结
  154. 第11章 优化模式
  155. 11.1 常见模式
  156. 11.1.1 减少工作量
  157. 11.1.2 以功能换效率
  158. 11.1.3 以空间换时间
  159. 11.1.4 以时间换空间
  160. 11.2 3R优化法
  161. 11.2.1 减少分配
  162. 11.2.2 重用内存
  163. 11.2.3 回收
  164. 11.3 不要泄漏资源
  165. 11.3.1 控制goroutine的生命周期
  166. 11.3.2 可靠地关闭资源
  167. 11.3.3 耗尽资源
  168. 11.4 尽可能预分配
  169. 11.5 使用数组时过度使用内存
  170. 11.6 内存重用和池化
  171. 11.7 本章小结
  172. 11.8 后续计划
  173. 附录 延迟的粗略估算
书名:Go语言高效编程:原理、可观测性与优化
作者:Bartlomiej Plotka
译者:叶志远, 彭彪, 陈坤云, 魏星 译
国内出版社:机械工业出版社
出版时间:2025年01月
页数:397
书号:978-7-111-76692-6
原版书书名:Efficient Go: Data-Driven Performance Optimization
原版书出版商:O'Reilly Media
Bartlomiej Plotka
 
Bartlomiej Plotka是Red Hat的首席软件工程师,拥有可观测性和SRE方面的专业背景。他是CNCF大使、TAG可观测性技术负责人以及Thanos项目的联合创始人。此外,他还是包括Prometheus和bingo在内的开源Go项目的核心维护者。
 
 
本书封面动物是一只草鹭(purple heron,学名Ardea purpurea),是鹳形目鹭科鹭属鸟类,这些草鹭有许多亚种,有时会与数量更多的灰鹭混淆。
草鹭的喙和脖子很长,身体和翅膀稍小,身体大部分的羽毛呈浅灰紫色,部分区域呈黑色、栗棕色和白色。脖子是棕色的,两侧有黑色条纹。头部、腹部和尾巴尖是黑色的。长腿方便它们涉水,并帮助它们从更高的有利位置观察。
草鹭分布广泛,遍布欧洲、亚洲和非洲的温带和热带地区。虽然它们喜欢淡水和高大的芦苇丛,但也可以在莎草丛、红树林、咸水、沼泽、稻田、河流、湖岸和沿海泥滩中找到它们的身影。它们喜欢植被茂密的地方,更常见于飞行,而不是在栖息地栖息。
水对草鹭的生存至关重要,因为它们的主要食物是中小型的鱼类。它们还捕食昆虫(甲虫、蝗虫和蜻蜓),以及青蛙、蝾螈或小型哺乳动物。
O'Reilly 图书封面上的许多动物都濒临灭绝,它们对世界很重要。
购买选项
定价:139.00元
书号:978-7-111-76692-6
出版社:机械工业出版社