systrace最吸引人的地方,在于当你不了解全部业务逻辑时,依然能够经过线程间的阻塞关系,快速定位问题。html
有了这篇文章的铺垫,后续的文章再开始分享技巧。android
----------------------------------------------------------------------------------------------算法
这篇文章的小目标:学会分析线程间的阻塞关系网络
-----------------------------------------------------------------性能
以前,咱们经过[Android systrace系列] systrace入门第一式学会了下面这些:google
放大缩小视图spa
CPU各个核在各个时间点运行的线程线程
流程之间的从属关系,以及各流程的耗时翻译
线程的运行状态(就绪,运行中,睡眠等等)orm
在介绍最实用一招前,描述一下我对性能问题的粗浅理解。
咱们能够将发生性能问题的部件划分为三类:
1)计算单元,例如CPU和GPU等
2)存储单元,例如闪存、硬盘和内存等
3)以上二者的链接部分,例如总线、网络等等。
问题的类型,也能够分为两种:能力不足以知足 和 能力没法有效发挥。
这两个方面交织起来,就有6种状况,举几个例子,
对于CPU,运算量太大致使运行时间长是属于前一种,而代码逻辑致使进程阻塞是后一种。
对于内存,内存申请量大,致使须要回收内存属于前一种,而剩余内存够,但分配算法不良致使碎片过多,没有足够的连续可分配空间则属于后一种。
性能分析中进程相关的部分,学会这一招能够解决很多问题。
阅读完下面的文章,你能体会到,A线程唤醒B线程,意味着A线程阻塞了B线程,B线程等待了A线程。
经过不断回溯被唤醒的顺序,基本能找到阻塞问题的源头。
讲述这一招的操做,我最喜欢的文章:
https://www.androidperformance.com/2019/07/23/Android-Systrace-Pre/
翻译腔官方文档:
https://developer.android.google.cn/topic/performance/vitals/render
官方文档的网友翻译:
https://zhuanlan.zhihu.com/p/27065828
有了以上优秀的文章,我欣喜而又遗憾地,将操做的讲述省略了。
在这些文章中付出耐心,十分值得,由于技能树立刻就能点亮了。
可以无视千万行代码逻辑,经过线程阻塞关系,定位问题的感受,太好了。
毕竟有时定位完问题,就能够转bug了^^
转载请注明出处:https://www.cnblogs.com/zzcperf/p/13992164.html