登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入   新用戶註冊
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2024年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / 物流,時效:出貨後2-4日

2025年01月出版新書

2024年12月出版新書

2024年11月出版新書

2024年10月出版新書

2024年09月出版新書

2024年08月出版新書

2024年07月出版新書

2024年06月出版新書

2024年05月出版新書

2024年04月出版新書

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

2023年12月出版新書

『簡體書』Go语言高效编程:原理、可观测性与优化 [波兰]巴特洛米·普洛特卡

書城自編碼: 4069322
分類: 簡體書→大陸圖書→計算機/網絡程序設計
作者: [波兰]巴特洛米·普洛特卡
國際書號(ISBN): 9787111766926
出版社: 机械工业出版社
出版日期: 2025-01-01

頁數/字數: /
書度/開本: 16开 釘裝: 平装

售價:NT$ 709

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
美丽的罗马尼亚蕾丝
《 美丽的罗马尼亚蕾丝 》

售價:NT$ 301.0
颜真卿传:时事只天知  近观系列
《 颜真卿传:时事只天知 近观系列 》

售價:NT$ 347.0
一封情书
《 一封情书 》

售價:NT$ 218.0
俄罗斯北极地区:地理环境、自然资源与开发战略
《 俄罗斯北极地区:地理环境、自然资源与开发战略 》

售價:NT$ 918.0
第一次管人
《 第一次管人 》

售價:NT$ 316.0
白人贫困 美国社会分裂的真相
《 白人贫困 美国社会分裂的真相 》

售價:NT$ 352.0
蜂群城市(一部关于未来城市的硬科幻小说)
《 蜂群城市(一部关于未来城市的硬科幻小说) 》

售價:NT$ 296.0
2024中国旅游业发展报告
《 2024中国旅游业发展报告 》

售價:NT$ 296.0

編輯推薦:
本书将带你穿梭于现代软件架构与操作系统中CPU与内存的奇妙世界,从Go的基础知识到高级特性与优化妙招,将被一一揭晓。书中还会介绍针对特定用例的优化之道,以及各种可观测工具,比如度量指标、日志、追踪和用于效率提升的“大杀器”——性能剖析(Profiling)。最后,从商业逻辑视角来看软件优化的最佳时机,确保所有的努力既实际又高效。
內容簡介:
虽然技术在进步,硬件也越来越物美价廉,但如今软件工程师仍需要关注程序的性能优化。本书将介绍软件效率问题、Go语言快速入门知识、如何实现高效编程,告诉大家如何高效进行性能优化,以及何时进行,并给出需要的工具和相关知识,让你使用较少的资源实现高效编程。
關於作者:
巴特洛米·普洛特卡是Red Hat的一名首席软件工程师,拥有可观测性和SRE背景。他是一位CNCF大使以及TAGO可观测技术的负责人,也是Thanos项目的联合创始人。他还作为核心维护人员参与了包括Prometheus和bingo在内的许多使用Go语言编写的开源项目。
目錄
目录
前言1
第1章 软件效率很重要9
1.1 性能的深意11
1.2 效率的常见误区14
1.2.1 误区1:优化后的代码可读性差14
1.2.2 误区2:YAGNI原则20
1.2.3 误区3:硬件变得更快、更廉价22
1.2.4 误区4:使用水平扩展29
1.2.5 误区5:尽快投入市场32
1.3 效率优先35
1.4 本章小结36
第2章 初识Go语言37
2.1 Go基础知识38
2.1.1 Go语言形态38
2.1.2 Go简化代码库39
2.1.3 Go是谷歌的开源项目40
2.1.4 核心设计原则41
2.1.5 包和模块42
2.1.6 Go如何管理依赖43
2.1.7 一致的工具46
2.1.8错误处理47
2.1.9语言生态50
2.1.10移除未使用的import和变量51
2.1.11单元测试和表测试52
2.2 高级语言元素54
2.2.1做好代码文档54
2.2.2向后兼容性和可移植性56
2.2.3 Go运行时57
2.2.4面向对象编程58
2.2.5泛型61
2.3 Go“快”吗64
2.4 本章小结66
第3章 征服效率68
3.1 对“优化”的思考69
3.1.1 合理的优化70
3.1.2 慎重的优化72
3.2 优化挑战74
3.3 了解你的目标76
3.3.1 应该形式化效率要求78
3.3.2 资源感知的效率要求80
3.3.3 获取和评估效率目标83
3.3.4 定义RAER的示例84
3.4 合理解决效率问题87
3.5 优化设计层级90
3.6 效率感知的开发流程94
3.6.1功能阶段95
3.6.2效率阶段97
3.7 本章小结99
第4章 Go如何使用CPU资源101
4.1 现代计算机架构中的CPU102
4.2 汇编语言104
4.3 了解Go编译器107
4.4 CPU和内存墙问题113
4.4.1 分层缓存系统115
4.4.2 流水线和乱序执行116
4.4.3 超线程118
4.5 调度器120
4.5.1 操作系统调度器120
4.5.2 Go运行时调度器124
4.6 何时使用并发130
4.7 本章小结131
第5章 Go如何使用内存资源133
5.1 内存的相关背景134
5.2 是否有内存问题135
5.3 物理内存136
5.4 操作系统内存管理机制139
5.4.1 虚拟内存140
5.4.2 mmap系统调用144
5.4.3 操作系统内存映射149
5.5 Go内存管理机制152
5.5.1 值、指针和内存块156
5.5.2 Go内存分配器160
5.5.3 垃圾收集164
5.6 本章小结169
第6章 效率可观测性170
6.1 可观测性171
6.2 针对延迟的插桩示例174
6.2.1 日志175
6.2.2 追踪180
6.2.3 指标185
6.3 效率指标语义191
6.3.1 延迟192
6.3.2 CPU使用情况198
6.3.3 内存使用情况202
6.4 本章小结205
第7章 数据驱动的效率评估206
7.1 复杂度分析207
7.1.1 效率复杂度预估207
7.1.2 渐近复杂度的近似预估209
7.1.3复杂度分析实践212
7.2 基准测试的艺术215
7.2.1与功能测试的对比217
7.2.2基准测试谎言219
7.3 实验的可靠性220
7.3.1人为错误221
7.3.2重现生产环境222
7.3.3性能的不确定性224
7.4 基准测试级别229
7.4.1生产环境中的基准测试231
7.4.2宏基准测试231
7.4.3微基准测试232
7.4.4 正确使用基准测试233
7.5 本章小结235
第8章 基准测试实践236
8.1 微基准测试详述236
8.1.1 Go基准测试238
8.1.2 基准测试结果分析243
8.2 微基准测试技巧247
8.2.1结果方差分析247
8.2.2 确定工作流程247
8.2.3确保结果正确249
8.2.4分享基准测试251
8.2.5 进行不同的基准测试254
8.2.6微基准测试与内存管理256
8.2.7 微基准测试与编译器优化257
8.3 宏基准测试详述261
8.3.1基础知识262
8.3.2 Go e2e 框架265
8.3.3理解并观测结果270
8.4 常见的宏基准测试工作流程277
8.5本章小结279
第9章 数据驱动的瓶颈分析280
9.1 效率根因分析281
9.2 Go中的性能剖析281
9.2.1 pprof格式282
9.2.2 go tool pprof 报告290
9.3 捕获性能剖析信号302
9.4 常用性能剖析插桩306
9.4.1 堆307
9.4.2 goroutine310
9.4.3 CPU312
9.4.4 off-CPU时间314
9.5 技巧317
9.5.1 共享性能剖析317
9.5.2 持续性能剖析318
9.5.3 比较和聚合性能剖析322
9.6 本章小结323
第10章 优化示例324
10.1 Sum示例325
10.2 优化延迟326
10.2.1 优化bytes.Split328
10.2.2 优化runtime.slicebytetostring330
10.2.3 优化strconv.Parse333
10.3 优化内存使用335
10.3.1 转向流式算法336
10.3.2 优化bufio.Scanner337
10.4 使用并发优化延迟342
10.4.1 朴素的并发342
10.4.2 分布式工作者模式344
10.4.3 不需要协调的工作者模式(任务分片)346
10.4.4 流式、分片的工作者模式348
10.5 额外技巧:打破常规思维351
10.6 本章小结352
第11章 优化模式353
11.1 常见模式354
11.1.1 减少工作量354
11.1.2 以功能换效率356
11.1.3 以空间换时间356
11.1.4 以时间换空间358
11.2 3R优化法358
11.2.1 减少分配358
11.2.2 重用内存359
11.2.3 回收360
11.3 不要泄漏资源362
11.3.1 控制goroutine的生命周期364
11.3.2 可靠地关闭资源370
11.3.3 耗尽资源373
11.4 尽可能预分配376
11.5 使用数组时过度使用内存380
11.6 内存重用和池化383
11.7 本章小结391
11.8 后续计划393
附录 延迟的粗略估算396
內容試閱
前言
软件开发一直都是一个求真务实的领域,软件工程师追求的往往是极高的性能目标、需 求与效率的平衡、优雅而高效的代码,以及易于阅读、扩展和维护的代码库。实现这些真的可能吗?
是的,笔者将通过本书展示如何实现这些!本书在某些方面是独树一帜的,因为它不是 一本速成教程,而是一本关于编写高效且务实的软件的完整指南,涵盖了笔者在软件开发领域的所见所闻。
通过本书,你将学到很多关于Go语言编程以及如何对其进行优化的知识。不要被本书的书名所迷惑,虽然笔者使用Go语言作为示例语言来展示优化思维和可观测性模式, 但本书的11章中有8章与编程语言无关。这些技术理念是相通的,可以用来改进任何其他语言(例如,Java 、C#、Scala 、Python 、C++ 、Rust 或 Haskell)编写的软件。
如果你期待的是一本包含大量底层优化技巧的书,那么这本书并不适合你。首先,软件的性能优化并不能一概而论。某人通过展开循环或在其结构体字段中使用指针获得了更 好的效率,并不意味着可以推广到所有场景!本书将介绍一些优化技巧,但会着重强调 效率的重要性。
其次,一些“低级”且有风险的技巧通常并没有多大用处。在大多数情况下,只需了解程序中浪费CPU时间和资源的症结所在,就可以低成本、高效率地实现效率和可扩展性目标。此外,你将了解到,除了用C++、Rust或汇编语言重写程序,在原程序基础上也存在高效的解决方案!
在阅读本书正文之前,建议先阅读本书的前言,其中有本书的写作目的,以及笔者专注于效率这个主题的原因。你还可以学习到如何更好地使用本书,从而在软件开发任务中受益。
缘何而作
笔者花了大约1200小时撰写本书,撰写本书并非一时冲动。在社交媒体盛行的时代,阅读与写作纸质书给人一种过时的感觉,但以笔者的经验来看,现代媒体往往将信息过 度简化,因为它们全靠短平快的内容来吸引读者,并获得收益,因此读者看过之后会觉 得似是而非。这会导致不良诱导( https://oreil.ly/A8dCv),且与笔者想通过本书实现的目 标相冲突。
笔者的目标其实很简单—让自己所使用或依赖的软件变得更好,并实现以下目的:
? 希望软件的贡献者(Contributor)和维护者(Maintainer)能够知晓其代码的效率,通 过持续优化让它变得更加高效。
? 希望软件的贡献者和维护者能够审慎对待所有的拉取请求(pull request),并提高效率。
? 希望周围的人知道如何专业地处理性能问题,而不是营造紧张氛围。
? 希望用户和利益相关者对目前行业中风靡的基准测试和廉价营销保持谨慎之心。
? 希望领导者、主管和产品经理能够充分地处理软件效率问题,并合理制定可落地的效率规范,以帮助工程师交付出合格的产品。
笔者想对软件的可持续发展尽一些绵薄之力。每一次因为软件的效率问题而浪费的CPU时间和内存不仅浪费了公司的大量金钱,也浪费了能源和硬件,从而对环境产生了严重的影响。因此,在省钱并保护环境的同时为你的企业创造更大的价值,是一件非常有意义的事。
笔者认为写一本书是实现这一目标的最佳方式。这会比通过日常工作、开源项目和会议 传播得更广。希望更多的人能够看到本书。
创作背景
在撰写本书时,笔者已经从大量的实践和错误中积累了经验,在软件效率和开发高质量软件方面小有所成。
笔者在19岁时就开始了全职专业软件开发的职业生涯,曾在英特尔从事软件定义基础设施(SDI)工作,同时还攻读了全日制计算机科学专业。笔者的技术栈最初是使 用Python为OpenStack项目( https://www.openstack.org)编写代码,然后使用 C++ 在 Mesosphere (https://oreil.ly/yUHzn)和 Twitter(现 X)与一些出色工程师合作编写代码[包括对当时流行的 Mesos (https://mesos.apache.org )项目的贡献]。最近几年,转向 为 Kubernetes (https://kubernetes.io)开发 Go 程序,并爱上了这门语言。
笔者在英特尔花了不少时间来研究节点超额订阅功能( https://oreil.ly/uPnb7)。通常来 讲,超额订阅允许在单台机器上运行比平时更多的程序。这样做是可行的,因为从统计学上来看,所有程序几乎很少会同时使用所有的保留资源。但从笔者目前的认知来看, 通过优化软件来省钱通常比使用这样的复杂算法更容易、更有效。
2016 年,笔者搬到伦敦,为一家初创游戏公司工作,与谷歌、亚马逊、微软和 Facebook 的一些前员工合作开发和运营一个全球游戏平台。我们用Go开发了许多微服务,主要是在全球数十个 Kubernetes集群上运行。正是在这里,笔者学到了很多有关分布式系统、站点可靠性工程和监控的知识。也许正是在那时,笔者习惯了使用一些出色的可观测性工具,这对于软件效率的落地至关重要。本书第6章中会对此进行说明。
从此以后,一切顺理成章。笔者将对可观测性方面的热情转化为了开发和使用一个名为Prometheus(https://prometheus.io)的流行开源时间序列数据库,以用于监控目的。最终, 笔者有幸成为一名官方维护者,同时启动了多个Go开源项目和库。最后,笔者也借此机会与 Fabian Reinartz 在开源社区中共同创建了一个名为Thanos(https://thanos.io)的 大型分布式时间序列数据库。这两个项目目前的使用范围已经非常之广,它们很有可能 正在你的公司的基础设施中运行!
2019 年,笔者加入了Red Hat,全职从事可观测性系统的开源工作。也因此有了更多深入研究持续性能剖析( continuous profiling)解决方案的机会,本书正文中也会提到这 一点。
此外,笔者还担任了云原生计算基金会( Cloud Native Computing Foundation ,CNCF,网址为 https://cncf.io)的大使和可观测性技术咨询小组(TAG,网址为 https://oreil.ly/f9UYG)的技术负责人,与其他成员共同组织会议。通过Prometheus和 Thanos项目, 笔者的团队每年都会通过CNCF指导计划(CNCF Mentoring Initiatives,网址为 https:// oreil.ly/rU0bg)指导多名工程师。
笔者已经编写或审查了成千上万行生产级的代码,使其具备可靠性和扩展性。到目前为止,笔者累计指导了20多位工程师。然而,最令笔者印象深刻的是主持开源工作,因为在这项工作中,笔者有机会与世界各地不同公司、具有不同背景、目标和需求的人士互动。
总的来说,笔者和共事的优秀人员取得了一些惊人的成就。在一个高质量代码环境中工作是幸运的,因为这样就不会花费时间去优化一些延迟或风格问题。我们致力于良好的 系统设计、代码可维护性和可读性,并试图将这些价值观带入开源社区。但是,如果笔者有机会再次开发像Thanos 这样的项目,一定会改善一件事:尝试更多地关注代码质量和所选择的算法的效率。笔者会从一开始就专注于制定更清晰的效率规范,并在基准 测试和性能剖析上投入更多的精力。
不要误会,笔者这样说并不表示 Thanos 的性能/效率差,相反,目前Thanos比一些竞 争对手更快,而且使用的资源也更少。我们在这上面花了不少时间,但仍然有优化空间,有许多瓶颈等待社区关注与反馈。如果从一开始就应用本书所介绍的知识、技术和 建议,笔者相信我们可以将开发成本降低一半,甚至更多,让Thanos达到今天的状态。
这些经历让笔者顿悟写一本这样的书是多么有必要!随着全民编程时代的到来,那些没有计算机科学背景的开发者可能会遇到很多错误和误解,尤其是在软件效率方面。市面 上没有太多文献可以为效率或扩展问题提供参考,尤其是对于Go这样的“年轻”语言而言更是如此。希望本书的问世能提供一些指导和帮助。
本书受众
本书旨在提供必要的工具和知识,以便根据具体情况和组织目标来明确何时以及如何应 用效率优化。因此,本书的主要受众是使用Go语言和任何其他现代编程语言编写程序的软件开发者。软件工程师的本职工作应该是确保他们创建的软件能在特定的功能需求 和效率要求下工作。所以在开始阅读本书时最好具备一些基本的编程技能。
笔者相信本书对那些操作他人编写的软件的人也有用,例如,DevOps工程师、SRE、系统管理员和平台团队。按照一些优化设计层级(如3.5节中所述),有时对软件优化进行投资是有意义的,而有时可能需要在其他层级去解决问题!此外,为了实现可靠的效 率,软件工程师必须对生产环境进行大量基准测试和实验(如第7章中所述),这通常意 味着与平台团队的密切协作。第6章中介绍的可观测性是目前软件工程中最为推荐的先 进工具。笔者强烈建议应该避免为SRE区分应用程序性能监控(APM)和可观测性。如果你在哪里看到了这种区分,极有可能是某些云服务商又要忽悠你付费。正如本书中将 要介绍的,可以在所有软件可观测性中复用相同的工具、插桩和信号,因为它们同宗 同源,有着相同的目标—构建更好的软件产品!
最后,笔者向那些希望保持技术能力,并想了解如何确保团队不会在效率问题上浪费数百万美元的经理、产品经理和领导者隆重推荐本书!
内容组织
本书共分为11章。在第1章中,将讨论软件效率及其重要性;在第2章中,将简要介绍Go及其在效率方面的考量;在第3章中,将讨论优化以及如何思考和处理优化。提高效率可能需要花费大量时间,但系统性的方法可以帮助你节省大量时间和精力。
在第4章和第5章中,将解释延迟、CPU和内存资源,以及操作系统和Go如何将它们抽象化。
从第6章开始,将继续讨论围绕软件效率进行数据驱动决策的含义;在第7章中,将讨论复杂度分析和实验的可靠性;在第8章和第9章中,将解释基准测试和性能剖析技术。
最后两章也很重要。在第10章中,将展示不同优化情况的各种示例;在第11章中,将介绍一些经验教训,并总结在Go社区中看到的各种有关效率的模式和技巧。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 台灣用户 | 香港/海外用户
megBook.com.tw
Copyright (C) 2013 - 2025 (香港)大書城有限公司 All Rights Reserved.