背景
最近看到一个故事,说的是一个很火的游戏,全球发行量很大,收入是用 dollar 来算。但是在启动的时候却要好几分钟,甚至几十分钟才能启动进入游戏,连续几年如此。后来在某玩家的观察中,发现游戏启动的时候,IO/内存/网络都没有明显波动,但是CPU暴涨,最后在该玩家锲而不舍的追击之下,将一次启动需要运行19亿次的if语句,降低到了多少忘记了。结果是在10多年的机器配置下,只用1分多钟就可以启动了。
感想
- 写烂代码的时候最好是同时引起IO/内存和网络的波动,不然很容易就被别人定位了。
- 当CPU跑满的时候,任何不能降低CPU计算的的优化都是瞎扯淡。
- CPU跑满的时候,找到它,解决它,加配置虽然有用(也好用),但有尽头。
- 找到它,解决它,Get技能: 定位+修复
- 找不到,加机器,Get技能: 加钱可以延缓
- 找不到,被解决,Get技能: N+1?????
- CPU高是由计算引起的。任何引起CPU高的直接原因都是计算,间接原因是因为什么引发了计算。
- while(true){//引发的死循环}
- Java程序员熟悉的FGC
- 频繁的TCP握手挥手
- IO
- 录屏玩家熟悉的ffmpeg