阿姆达尔定律(Amdahl‘s Law)

阿姆达尔定律(Amdahl's Law)

1、核心定义

用来定量计算:对系统中某一部分做并行 / 加速优化后,整个系统理论上能达到的最大加速比上限 。 核心结论: 系统里无法并行、必须串行执行的那一小段代码,决定了整个程序的性能天花板。

2、公式

符号说明

  • \(S_{max}\):整体理论最大加速倍数;
  • f:可以被并行加速的代码占总执行时间的比例;
  • N:投入的并行工作单元(CPU 核心、线程数)。

极端场景推演

哪怕给无限算力,加速比也被串行部分死死锁住。

3、举直观例子

例子 1

一段程序:80% 逻辑可以多线程并行,20% 只能串行执行。 1)只用单线程:总耗时记为 T 2)开到无限多核并行: 整个程序最快最多只能提速5 倍,剩下那 20% 串行代码就是瓶颈,堆再多 CPU 核心也没用。

例子 2

如果串行部分占到 50%:无论开多少线程,整体最多提速 2 倍。

4、套到你熟悉的 Java 多线程、NIO 场景

  1. 场景:大量 IO 等待(网络读写、数据库等待)可以并行;但主线程初始化、全局锁争抢、单例串行计算、日志同步刷盘这部分是串行。 就算开几十上百条 Netty 工作线程,整体吞吐上限被串行瓶颈卡死;
  2. 锁竞争激烈时:临界区代码串行执行,这部分就是公式里的 (1-f),锁越重,f 越小,多线程收益微乎其微;
  3. NIO 优化:把阻塞等待改成多路复用,本质就是把大量串行阻塞等待变成可并行调度,拉高f。

5、通俗人话总结

  1. 程序里串行跑不掉的代码,是性能的天花板;
  2. 不要盲目堆线程、堆 CPU 核心,优先优化串行瓶颈(锁、同步阻塞、单线程繁重计算)收益最大;
  3. 并行部分占比越高,多核优化收益越明显;串行占比越高,多核基本白费。

6、延伸小补充

阿姆达尔是固定问题规模下的加速比; 配套的古斯塔夫森定律是:业务数据量跟着核心数同步变大时,加速比会更高。日常后端调优优先看阿姆达尔。

相关推荐
信誓旦旦的程序猿10 小时前
【Python量化实战宝典 #20】动量、反转择时手册:趋势跟随与均值回归(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
电商全栈程序猿10 小时前
2026 开源商城系统选型指南:开发者实测对比Tigshop、ShopXO、CRMEB
java·运维·开源
利威尔xu10 小时前
万字详解 | Go 进阶(二)GC 三色标记:STW 从 10ms 压到 40μs,1 次 Full GC 让线上 P99 抖了 3 秒
开发语言·后端·性能优化·golang·高并发
坤坤子吖10 小时前
C++继承:继承的基本用法与访问规则
开发语言·c++·笔记·学习
骑着蜗牛撵大象32710 小时前
用 Codex 批量做数字人商品口播视频:从分镜 JSON 到成片校验的流水线
java·ffmpeg·json·音视频·数字人·视频·codex
紧跟先前的步伐10 小时前
Go AI Agent 实战 12|HTTP 状态码、API 错误处理与日志
开发语言·人工智能·http·ai·golang
博风10 小时前
使用Spring官网下载Springboot骨架
java·spring boot·spring
Demon--hx10 小时前
C++ 文件流:理解 ifstream/ofstream 与 RAII 机制
开发语言·c++
纪念 22910 小时前
C++ stack和queue
开发语言·c++
hhb_61810 小时前
Python异步队列实战:高效处理耗时任务
开发语言·python