Go 进阶 · 分布式爬虫实战
郑建勋
Go 语言技术专家,《Go 语言底层原理剖析》作者
15839 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
Go 进阶 · 分布式爬虫实战
15
15
1.0x
00:00/00:00
登录|注册

09|破解性能谜题:性能优化的五层境界

你好,我是郑建勋。
俗话说:“九层之台,起于累土”,在上节课,我们搭建起了 Go 程序性能优化的分层分析范式,并讲解了系统设计与程序设计层面需要考虑的性能问题。
在这节课,我将更进一步,分析一下影响高性能程序的底层基石:代码实施、操作系统与硬件。分析如何在这些层面进行设计和调优,最终实现高性能的目标。
让我们先从代码实施阶段讲起。

代码实施级别

代码实施,简单来说就是实际的代码开发。为了满足特定的目标,我们要在代码的设计、开发以及最终阶段对性能进行合理甚至是极致的优化。
编写代码时的性能优化有三层境界:
合理的代码;
刻意的优化;
危险的尝试。

合理的代码

合理的代码看起来非常自然,就像是从优秀开发者的指尖自然流淌出来的,但这样的代码对开发者的个人素质要求却极高。由于不同开发者在语言理解和程序设计上的差异,他们开发出来的代码常常风格迥异。这就需要一些制度和规范来帮助我们写出更优雅、高效、易懂的代码。
这些规范涉及程序开发的方方面面,包括目录结构规范、测试规范、版本规范、目录结构规范、代码评审规范、开发规范等等。这部分你可以参考一下UBER 开源的 Go 语言开发规范。有时只需要遵守一些简单的规则,就能够大幅度减少未来在性能方面的困扰(我在后面将会给出一版更详细的 Go 语言开发规范)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了性能优化的关键要点,从代码实施、操作系统与硬件等底层基石入手,分析了高性能程序的设计和调优方法。作者提出了三种性能优化境界:合理的代码、刻意的优化和危险的尝试。合理的代码需要遵守规范,对算法和数据结构进行设计改造,以及进行空间换时间的trade-off。刻意的优化涉及到程序瓶颈的定位和解决,需要使用工具如pprof、trace、dlv、gdb等进行性能分析和优化。而危险的尝试则涉及到一些特别的优化手段,如CGO技术、unsafe库操作指针以及汇编代码的使用。这些优化手段需要开发者在权衡利弊后谨慎使用。 文章还介绍了操作系统级别的性能优化,强调了操作系统对程序性能的深刻影响,以及如何利用工具如TOP命令、mpstat命令和perf等进行资源利用情况的观察和分析。此外,容器化时代对性能问题的新挑战也得到了探讨,提出了Cgroup和Namespace技术构建的轻量级虚拟容器,以及对操作系统观测手段的一些误导和解决方法。最后,文章还提到了硬件级别的性能优化,强调了硬件的性能决定了处理速度的上限,以及有效利用硬件特性能加速软件运行的重要性。 总的来说,本文内容丰富,涵盖了性能优化的多个方面,为开发者提供了全面的指导和方法,有助于他们更好地理解和应用性能优化的关键技术。文章通过深入浅出的方式,帮助读者了解性能优化的重要性以及在代码、操作系统和硬件层面的具体优化方法,为开发者提供了宝贵的指导和思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 范飞扬
    课后思考题:现代IDE都支持语法检测,但不支持一些最佳实践。最近用了Copilot,发现它的代码提示非常强大,也可以作为“规避代码书写中的错误”的工具。老师怎么看Copilot? 它适合在学习中使用吗?它适合在工作中使用吗?

    作者回复: Copilot这种释放生产力的手段,是未来的一种趋势。

    2022-10-31归属地:北京
    2
    3
  • 8.13.3.27.30
    太抽象了 后续有没有实战 手把手一样的 练习

    作者回复: 15讲后进入实战

    2022-11-10归属地:北京
    2
  • 那时刻
    文中提到:如何通过 pprof、trace、dlv、dgb 等工具。这里的dgb应该是gdb么?

    作者回复: 笔误,我尽快修复它

    2022-11-08归属地:北京
    1
  • Realm
    1 编辑器很多提供lint,如goland安装一些插件,错误、警告⚠️都提示出来了; 2 可以配置golangci-lint ,确定哪些需要强制检查; 3 配合CI,在push代码的时候,强制检查; 确定原则、形成规范、逐步推广、优化.
    2022-10-29归属地:浙江
    3
  • 徐海浪
    思考题: SonarQube等代码扫描工具
    2022-10-30归属地:广东
    1
    2
  • 各种 linter
    2022-10-29归属地:广东
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部