这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战。
不战而屈人之兵,善之善者也
性能优化的第一原则是,通过测试,日志,profiling 分析出哪有问题,然后有的放失。
性能优化时持久战,在深入理解业务后,结合系统响应,系统吞吐,系统并发量指标再对系统进行优化
一般来说,一个系统有性能问题: 有可能是一下几方面: CPU, 内存, IO(磁盘IO,网络IO).
性能优化的目标是追求合适的性价比。
性能优化前,需要深入的理解业务,代码是为了业务服务,服务于最终用户。
性能优化,可以在需求阶段,设计阶段,实现阶段。
高手总是花80%时间用来思考, 20%时间实现。
需求阶段,如果可以达到一样的目的,但是用更优方式解决, 这样稍微调整需求的基础上,能大大解决程序性能问题。
设计阶段: 架构设计,技术选型,接口设计等,这些设计如果做了不好,后续也很难优化。
实现阶段: 一个函数的,一段代码的好坏,也会影响后续的优化,静态的优化,编译时的优化,运行时的优化等。
说完了道,谈谈术。
阿里巴巴 Java 开发手册(华山版).pdf
看看代码是否有如下问题:
中有 工具
一般代码层面可以结合火焰图观察
python 有一些 profile 结合性能分析
没有什么性能问题不是缓存解决不了的。如果有,就再加一顿,不, 是加一级缓存 !!!
缓存的本质是加速访问,访问的数据,要么是其他数据的副本,要么是之前计算结果(避免重复计算)
缓存是以空间换时间。
缓存,我们会想到,本地缓存()
也会想到一些中间件 等
但缓存也不是万能的,需要考虑如下问题
一个线程或者说一个协程干不完,可以启多个协程干。并发提高了系统的吞吐,又减少用户的平局等待时间。
多个协程或者多个线程处理用户请求,可以充分利用多核 CPU 。 还有 IO的时候,也用多线程,,其实也是一种并发。
有网络IO,磁盘 IO 时候,需要合并操作,批量操作,往往可以提升吞吐,提高性能。
每次读取数据的时候,批量读,防止频繁建立 IO 连接。因为当涉及到网络请求是,网络传输的消耗往往大于处理时间。
比如 mysql 中的批量插入, 中的 , 的
异步也是一种优化方式,针对接口,可以做一些请求附属,非主要流程的事情。
异步的方式一般如下:
在线客服
客服咨询
官方微信
返回顶部