00:00 / 03:11
连播
清屏
智能
倍速
点赞29
#性能优化 第三章:性能的四重天花板 任何软件系统,都受这四层由物理和数学法则设定的天花板约束: 物理层:硬件的绝对极限(电信号传播速度、热力学与功耗、机械延迟) 计算层:算法的理论边界(时间复杂度、空间复杂度、阿姆达尔定律) 通信层:数据的传输成本(网络延迟和带宽限制) 能耗层:电池的容量限制(计算、通信和屏幕耗电) 今天我们聚焦在物理层,这是最基础,也最难绕过的一层。 第四章:物理层-让数据少跑路 计算机最贵的成本不是计算,而是移动数据。 一段数据的完整旅程:磁盘->内存->CPU缓存->CPU寄存器->计算->写回缓存->写回内存->写回磁盘。 每一次移动都有代价。优化的灵魂,就是让数据少移动、近移动、批量移动。 三大物理法则 1、靠近计算(放近处) 硬件世界有“阶级”:CPU缓存 (几纳秒级)> 内存(100纳秒级) > SSD硬盘(几十微秒级) > 机械硬盘(几毫秒级); 这就像你从书桌上拿书,比从书架上拿快;从书架上拿,又比去仓库拿快。所以把常用的书提前从仓库搬到书桌上,这就是靠近计算。比如把常用数据从硬盘移动到缓存中,就是离CPU近。 更狠一点:把计算推到数据那边去,而不是把数据拉到计算这边来。比如把灶台直接搬到菜地。 法则二:局部性原理 空间局部性(挨着放) 你刚拿了这本书,大概率很快会拿相邻的书,这就是空间局部性。 比如你取数组的第1个值,大概率接下来会取数组的第2个第3个值,数组在内存中挨着放,可以一次性取完数组所有数据,所以遍历快;链表节点散落,所以遍历慢。 时间局部性(重复用) 你用过的书,很可能马上再用,这就是时间局部性。 比如循环中需要用到某个函数的结果值,可以事先调用一次函数将结果值存起来,每次循环取这个值即可,而不是每次循环都去再调用一遍函数。 法则三、集中计算(一次搬一车) 来回一趟趟的跑仓库拿书是要花很多时间的,所以尽量去仓库,就把需要的书都一次性都拿回来,或者事先归拢好要还的书,一次性都放回去。这就是集中计算。 把要处理的数据先“聚拢”在同一时间、同一地点再处理。 比如每次“启动计算”都有固定开销:从磁盘读到内存(I/O开销),从内存读到缓存(总线开销),函数调用(栈帧开销),线程切换(上下文切换开销)。 集中处理 = 一次开销,处理N条数据
00:00 / 03:50
连播
清屏
智能
倍速
点赞44
#性能优化 软件系统性能优化实操总结 第一部分:四层约束与优化方法 任何软件系统的性能,都受物理层、计算层、通信层、能耗层这四层基本约束。理解这些约束,并针对性地应用优化手段,是性能调优的根基。 物理层:硬件资源视角 •三大底层法则: 计算靠近数据(减少搬运) 计算集中处理(提升利用率) 局部性原理(时间/空间重用) •六招优化: 缓存(CPU缓存/内存)加速访问 预取预加载(提前载入数据); 异步I/O与并行处理(提升吞吐), 批量读写(减少交互次数); 压缩数据(节省存储空间); 存储介质升级(降低延迟)。 计算层:算法与代码视角 •三大核心约束: 时间复杂度(CPU耗时) 空间复杂度(内存占用) 阿姆达尔定律(串行瓶颈限制并行加速) •九招优化: 选对算法(最优复杂度), 高效数据结构(匹配操作模式); 建立索引(加速查找), 消灭重复计算(缓存计算结果); 分治并行(拆分任务), 近似算法(精度换速度); 批处理聚合(减少调用开销), 预处理物化视图(以空间换时间); 代码级优化(循环展开/内存布局/编译优化)。 通信层:网络传输视角 •两大物理瓶颈: 光速延迟(无法超越) 带宽有限(信道容量) •六大口诀: 能不传就不传(本地缓存/CDN边缘缓存); 能少传就少传(压缩传输/只传必需); 能近传不远传(CDN 就近接入); 能异步不同步(消息队列削峰填谷); 能复用不新建(连接池/会话复用); 能批量不单发(合并请求减少交互)。 能耗层: 功耗管理视角 •三大能耗大户: 计算、通信、屏幕 •五字真言: 能不醒就不醒(任务合并减少唤醒); 能轻载不重载(大小核调度按需分配); 能专用不通用(硬件加速降低功耗); 能本地不远程(数据就近处理减少传输); 能关掉不待机(及时释放硬件资源)。
00:00 / 03:33
连播
清屏
智能
倍速
点赞22
00:00 / 06:12
连播
清屏
智能
倍速
点赞25