性能工程高手课
庄振运
Facebook性能优化和容量管理高级专家
立即订阅
2132 人已学习
课程目录
已更新 13 讲 / 共 36 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 代码不要眼前的苟且,而要效率的提升和性能的优化
免费
开篇:认识代码性能和系统容量效率 (3讲)
01 | 程序员为什么要关心代码性能?
02 | 程序员也要关心整个系统和公司成本吗?
03 | 导读:专栏是怎么设计的?需要哪些知识?
性能定律和数理基础 (5讲)
04 | 性能工程三定律:IT业和性能优化工作的“法律法规”
05 | 概率统计和排队论:做性能工作必须懂的数理基础
06 | 性能数据的分析:如何从大量数据中看出想要的信号?
07 | 性能数据的展示:一图胜千言,说出你的数据故事
08 | 经验总结:必须熟记的一组常用性能数字
性能测试 (4讲)
09 | 性能测试的种类:如何快准狠地抓住一个测试的本质?
10 | 性能测试的规划和步骤:为什么性能测试不容易一蹴而就呢?
11 | 性能测试的工具:七大测试场景如何选择高质量的测试工具?
12 | 九条性能测试的经验和教训:如何保证测试结果可靠且可重复?
性能工程高手课
登录|注册

01 | 程序员为什么要关心代码性能?

庄振运 2019-12-02
你好,我是庄振运。
感谢你加入这个专栏的学习,我也非常高兴能有机会和你一起探索这个领域。
我在计算机和互联网行业已经研究和工作近 20 年了,一直从事性能优化和容量管理相关的工作。从今天起,我就和你分享我这些年的经验和感悟。
提起计算机和互联网,多数人首先想到的职业是程序员。中国有多少程序员呢?很多人估计有 600 万左右。全球的人数就更多了,肯定超过 2000 万。
我虽然也在互联网领域,也做过几年写程序的工作,但是现在的工作,严格意义上不算程序员,而是性能工程师。不过我和很多程序员朋友一起工作过,也讨论过。谈到性能优化和系统容量管理的时候,一开始他们经常会问我一个问题,就是程序员为什么需要了解性能和容量这些东西?通俗点说,这个问题就是:我就是一介程序员,性能和系统容量听起来很重要,但与我何干?
这个问题问得很好。我可以和你肯定地说,程序员应该关心,也必须关心代码性能和系统容量。今天这一讲,我们先说说程序员为什么需要关心性能。

怎么定义“性能”和 “性能好”?

说起代码性能,首先我们需要弄清楚什么样的代码算是性能好?怎么样算是性能不好?
代码性能表现在很多方面和指标,比较常见的几个指标有吞吐量(Throughput)、服务延迟(Service latency)、扩展性(Scalability)和资源使用效率(Resource Utilization)。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《性能工程高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • OlafOO
    老师对不同阶段程序员举的例子好经典

    作者回复: 😄,谢谢。祝愿你快速修炼到最高级!

    2019-12-02
    7
  • Jxin
    有意思。文笔有优秀产品经理的雅致与风趣。逻辑有优秀程序员的清晰与精准。开篇两章,已见不凡。追了,追了。

    作者回复: 好高的评价!谢谢谢谢。

    2019-12-03
    6
  • arsterc
    赞! 以前都是零碎的学习性能方面的知识, 现在可以系统学习了. 期待!
    2019-12-03
    2
  • 权奥
    遇到过快速启动200个Python进程,触发了系统oom,导致一个重要服务被kill的问题
    2019-12-03
    2
  • Bugzella
    最近在做一些后台性能提升的工作,一个主要方式就是使用redis一类的缓存,降低读取操作数据库的频率,可以提升应用的延迟,提高数据库的吞吐量。另外一个例子是数据库读取语调优对于大部分严重依赖数据库的应用很重要,希望在这里也能读到相关的心得和分享。
    2019-12-03
    2
  • 旭东
    程序优化一般都在业务优化以后吧,业务流程的优化效果也不可忽视
    2019-12-05
    1
  • Q
    第一,为什么那么多人不重视不了解性能优化,要怪就怪,现在的机器性能太强悍了,人类科技的进步,掩饰掉了大部分因为人为原因造成的性能问题,所以科技的惯性太隐蔽又太强悍。
    第二,关键还在于业务数据量是否增长和公司是否重视性能测试,如果重视性能压测,那么早期都会发现系统性能的瓶颈和压力在哪里,否则总是会在生产过程某个时间点中出问题,所以测试手段很重要。

    作者回复: 体会的很好!

    2019-12-04
    1
    1
  • 子龙
    没有遇到什么有意思的性能问题
    感想,性能问题的解决,依赖人对整个计算机运行的理解
    对程序运行环境的理解:什么语言、什么系统、什么CPU、什么硬盘等等
    有可能出现哪些问题,重点观察对应的指标,印证猜想,找对应的方案

    作者回复: 很不错的感想。的确,知道得多很重要。

    2019-12-02
    1
  • han
    以前公司的产品会做专业的性能测试,由专业的测试工程师完成,性能的要求也会被写到产品的PRD中,整个开发测试团队都要对性能负责。
    2019-12-16
  • 海罗沃德
    我正努力成为技术专家中
    2019-12-13
  • 志鑫
    用golang写了例2的benchmark,的确像老师说的那样,ij方式要快! 速度比 102:9

    Running tool: /usr/local/go/bin/go test -benchmem -run=^$ -bench ^(BenchmarkFor_IJ|BenchmarkFor_JI)$ -v

    goos: darwin
    goarch: amd64
    BenchmarkFor_IJ-4 102 12360520 ns/op 1254901 B/op 0 allocs/op
    BenchmarkFor_JI-4 9 113365872 ns/op 14222222 B/op 0 allocs/op
    ``` golang
    package main

    import "testing"

    const n = 4000

    func BenchmarkFor_IJ(b *testing.B) {
    var arr [n][n]int
    for c := 0; c < b.N; c++ {
    for i := 0; i < n; i++ {
    for j := 0; j < n; j++ {
    arr[i][j] = i + j
    }
    }
    }
    }

    func BenchmarkFor_JI(b *testing.B) {
    var arr [n][n]int
    for c := 0; c < b.N; c++ {
    for i := 0; i < n; i++ {
    for j := 0; j < n; j++ {
    arr[j][i] = i + j
    }
    }
    }
    }
    ```

    作者回复: 赞!

    2019-12-09
  • 丁丁历险记
    例子一的程序员直接开除。
    例子五的架构师鼓舞着我们前行(做死)

    每天都在做死的路上

    作者回复: 要允许年轻人犯错误,每个人都是从菜鸟到大虾的。😄

    2019-12-05
  • 西西弗与卡夫卡
    早期为了快速发展业务,公司使用了Ruby,开发是快,但扛不住多少访问量。后来业务验证之后,就更换成Java。在不同业务阶段,在快速验证和提升性能之间选择不同策略。

    作者回复: 对,Java应该更有效些。不过比起C++来,C++又胜一筹了。这就是开发速度和效率的关系。一般后端用C++和Java比较多,因为需要高效率。

    2019-12-03
  • :)
    老师讲得太好了!这课性价比 太高了!

    作者回复: 太谢谢了!更加有干劲了,努力做得更好!

    2019-12-03
  • humor
    以前在一个方法上使用了synchronous关键字,自己测试觉得没问题,发布到线上之后,系统就特别慢,各种超时…以后再也不敢随便用锁了

    作者回复: 恩,尽量把锁的范围变小;只锁绝对需要锁的地方。

    2019-12-03
  • 夜空中最亮的星(华仔)
    老师讲的很好,写出跑的飞快的代码的程序员很让人佩服

    作者回复: 非常感谢!

    2019-12-02
  • 故事、自己写
    不求一字万金,一字千金即可~

    作者回复: 哈哈,你一定可以的!

    2019-12-02
收起评论
17
返回
顶部