CPU架构详解:从指令周期到性能优化,揭秘计算机大脑的工作原理
1. 项目概述从“黑盒子”到“指挥中心”“CPU Architecture Explained”这个标题直译过来就是“CPU架构详解”。乍一看这像是一个教科书式的、充满术语的枯燥话题。但如果你曾好奇过为什么你的手机能流畅播放4K视频为什么游戏里一个复杂的物理效果需要一块“更高级”的处理器或者为什么有些程序在苹果的M系列芯片上跑得飞快而在老款Intel芯片上却慢如蜗牛那么理解CPU架构就是解开这些谜团的钥匙。CPU中央处理器它远不止是电脑或手机里一块发热的“小方块”。它是整个计算设备的“大脑”和“指挥中心”。我们日常所说的“这个CPU快不快”本质上是在问这个“指挥中心”的组织结构、工作流程和效率如何。架构就是描述这个指挥中心内部如何设计、各个部门单元如何协同工作的蓝图。它决定了CPU如何理解指令、处理数据、管理内存并最终决定了它的性能、功耗和适用场景。这篇文章我将从一个一线开发者和硬件爱好者的角度带你深入CPU的内部世界。我们不会停留在背诵“冯·诺依曼结构”五个字的层面而是会拆解从你点击鼠标到屏幕产生反应这短短几微秒内CPU内部究竟发生了什么。无论你是想优化代码性能的软件开发者是挑选电脑硬件的发烧友还是对计算机原理充满好奇的学习者理解CPU架构都能让你拥有透视电子设备“思维过程”的能力。接下来我们将从最核心的设计哲学开始一步步揭开现代CPU的复杂面纱。2. 核心设计哲学冯·诺依曼与哈佛架构之争要理解现代CPU必须从它的设计根源谈起。这就像理解一栋摩天大楼得先知道它的地基和承重结构。在CPU的世界里有两个奠基性的设计思想冯·诺依曼架构和哈佛架构。它们的核心分歧在于如何对待“指令”和“数据”。2.1 冯·诺依曼架构简约的统一派冯·诺依曼架构也被称为“普林斯顿架构”是当今绝大多数通用计算机你的笔记本电脑、手机、服务器的基石。它的核心思想极其简洁有力指令和数据共享同一套内存系统和总线。你可以把它想象成一个巨大的、井然有序的中央图书馆。这个图书馆里既有藏书数据也有图书管理员的工作手册指令。当管理员CPU需要执行一项任务时他会按照工作手册的步骤取指令然后去书架上找到对应的书籍进行操作存取数据。指令和数据都存放在同一个图书馆的编目系统下使用同一套借阅规则。这种设计的优势非常明显设计简单成本低只需要一套内存控制器、一套地址总线和数据总线硬件复杂度大大降低。灵活性极高由于指令在内存中程序可以被动态地修改、加载和覆盖。这使得编写操作系统、编译器以及能够自我修改的代码成为可能是现代软件生态多样性的基础。存储效率高内存空间可以根据程序运行时的需要动态分配给指令或数据利用率高。然而它的缺点也同样突出即所谓的“冯·诺依曼瓶颈”。因为指令和数据共用同一套通路CPU在同一个时刻只能进行取指令或者存取数据的操作无法同时进行。这就好比图书馆只有一个出入口管理员取工作手册和搬书不能同时进行容易在繁忙时造成拥堵。随着CPU速度越来越快内存速度相对滞后这个瓶颈就愈发明显。2.2 哈佛架构高效的分离派哈佛架构则采取了截然不同的思路为指令和数据提供物理上分离的存储空间和传输通路。沿用图书馆的比喻哈佛架构相当于建了两栋独立的楼一栋是“指令图书馆”只存放所有管理员的工作手册另一栋是“数据图书馆”只存放书籍。两栋楼有各自独立的大门和通道。这样管理员可以同时从指令楼取一份手册同时从数据楼搬一摞书互不干扰。这种设计的核心优势在于更高的并行性和吞吐量取指令和存取数据可以同时进行理论上能实现更高的执行效率尤其适合指令流固定的场景。更高的安全性指令存储区可以被设置为只读防止程序指令被意外或恶意篡改增强了系统的可靠性。但它的缺点在于复杂性和灵活性需要两套完整的内存系统可能包括缓存硬件设计更复杂成本更高。同时程序指令的灵活性受限难以实现动态修改。2.3 现代融合 Modified Harvard Architecture在现实中纯粹的哈佛架构多见于对实时性和确定性要求极高的嵌入式系统、数字信号处理器DSP和早期的微控制器如经典的8051、AVR系列中。而对于我们日常使用的x86、ARM等通用处理器它们采用了一种巧妙的折中方案Modified Harvard Architecture改进型哈佛架构。这种架构在处理器核心内部尤其是缓存层级采用了哈佛架构的思想但在核心外部仍然遵循冯·诺依曼的统一内存模型。具体来说在L1缓存级别分离现代CPU的L1缓存几乎总是分成独立的L1指令缓存I-Cache和L1数据缓存D-Cache。这样CPU核心可以在同一个时钟周期内同时从I-Cache取指令从D-Cache读写数据实现了哈佛架构的高效并行。共享外部内存和总线在L2、L3缓存以及主内存DRAM层面指令和数据仍然是混合存放的共享同一套内存控制器和系统总线。这保留了冯·诺依曼架构的灵活性和成本优势。实操心得理解这种混合架构对软件开发有实际意义。例如编写代码时如果指令局部性很好循环代码紧凑就能更好地利用I-Cache如果数据访问模式规律如顺序访问数组就能更好地利用D-Cache。反之糟糕的代码结构如函数体巨大、数据随机访问会导致缓存命中率低下即使CPU主频再高性能也会大打折扣。这也是为什么在性能优化时我们经常要关注“缓存友好性”。3. CPU核心工作流程指令周期深度拆解理解了CPU的宏观架构我们再把镜头拉近看一个核心是如何执行一条条指令的。这个过程被称为“指令周期”它是CPU工作的心跳。经典的指令周期分为四个阶段取指、译码、执行、写回。但现代高性能CPU早已将其深化为一个复杂的、高度流水线化的过程。3.1 经典四阶段模型取指FetchCPU根据“程序计数器”PC或称指令指针中存储的地址从内存实际上绝大多数时候是从L1指令缓存中读取下一条要执行的指令。读取后PC会自动增加指向下一条指令的地址除非遇到跳转指令。译码Decode取出的指令是一串二进制代码。译码器的工作就是“破译”这串密码识别出这是什么操作是加法、减法、还是跳转操作数在哪里是来自寄存器还是内存地址以及结果要存到哪里去。这个过程将指令转换成控制CPU内部各单元如ALU、寄存器堆的微操作信号。执行Execute这是指令周期的核心。算术逻辑单元ALU或其他功能单元如浮点单元FPU、地址生成单元AGU根据译码阶段产生的控制信号执行具体的运算。例如进行两个寄存器的加法或者计算一个内存地址。写回Write-back将执行阶段产生的结果写入到目标位置。这可能是某个通用寄存器也可能是内存通过存储单元。写回完成后一条指令的执行才算真正结束。注意这个四阶段模型是一个高度简化的抽象。在真实的CPU中尤其是采用复杂流水线的现代CPU如Intel的Core系列、AMD的Ryzen系列每个阶段都可能被进一步拆分成更多更细的“流水线级”以提升并行度。3.2 流水线化让CPU“忙”起来如果CPU一次只处理一条指令的这四个阶段那么大部分时间CPU的各个部件取指单元、译码单元、ALU等都处于闲置状态利用率极低。这就好比工厂里只有一条生产线一个工人做完所有工序才能开始下一个产品。流水线技术就是为了解决这个问题。它将指令处理过程拆分成多个更小的、耗时接近的“流水线级”让多条指令像工厂流水线上的产品一样重叠执行。当第一条指令进入“执行”阶段时第二条指令已经在“译码”阶段第三条指令则开始了“取指”阶段。流水线带来的性能提升是巨大的。理想情况下一个具有N级流水线的CPU每个时钟周期都能完成一条指令的执行即CPI接近1吞吐量是单周期处理方式的N倍。然而流水线也引入了新的挑战结构冒险硬件资源冲突。例如单端口的内存无法同时支持一条指令取指和另一条指令读写数据。解决方案是增加资源如分离的指令/数据缓存或设计更复杂的仲裁逻辑。数据冒险数据依赖冲突。例如指令B需要用到指令A的计算结果但A的结果还没写回B就已经进入需要该数据的执行阶段。解决方案包括转发将A的结果直接从执行阶段出口“绕道”送到B的入口、流水线暂停插入“气泡”等。控制冒险分支指令带来的冲突。当遇到条件跳转指令如if语句时在条件判断出结果之前流水线不知道下一条该取哪里的指令。盲目继续取指可能导致错误执行清空流水线又会带来巨大性能损失。这是现代CPU性能优化的关键战场催生了分支预测技术。3.3 超越流水线超标量与乱序执行为了进一步榨干硬件潜力现代CPU在流水线基础上引入了更激进的技术超标量CPU内部集成了多个相同的功能单元如多个ALU、多个加载/存储单元。配合一个复杂的分发器它可以在一个时钟周期内从指令缓存中取出多条指令并尝试将它们同时分发给空闲的执行单元。这要求指令之间没有数据依赖即它们是相互独立的。乱序执行这是现代高性能CPU的核心魔法。CPU不会严格按照程序顺序执行指令而是会动态分析指令间的依赖关系。只要操作数就绪且执行单元空闲即使这条指令在程序中排在后面也可以提前执行。一个重排序缓冲区负责在指令执行完毕后按照原始程序顺序重新提交结果保证最终的程序逻辑正确。乱序执行能极大地减少因等待数据而产生的空闲时间。一个简化的现代CPU核心工作流程可以描述为前端按顺序取指、译码并将微操作存入一个“重排序缓冲区/保留站”队列。分发器监视队列寻找那些所有操作数都已就绪的微操作。一旦找到就将它们分派给对应的空闲执行单元可能是ALU、FPU、AGU等。执行单元并行工作完成后将结果写回并通知依赖于此结果的其他指令。退休单元按程序顺序将已完成的微操作的结果最终提交到架构寄存器程序员可见的寄存器和内存更新机器状态。这个过程高度动态、复杂依赖于大量预测和调度算法其目的只有一个让昂贵的执行单元尽可能保持忙碌最大化每个时钟周期的指令吞吐量。4. 核心微架构组件详解CPU的强悍性能建立在多个高度专业化且协同工作的内部组件之上。理解这些组件就像了解一个顶级运动员的肌肉、神经和骨骼系统。4.1 算术逻辑单元CPU的“计算心脏”ALU是CPU中真正进行算术和逻辑运算的地方。它接收来自寄存器或前级指令的两个操作数以及来自控制单元的操作码如ADD, SUB, AND, OR然后输出运算结果和一组状态标志。状态标志寄存器是ALU的“副产品”但至关重要。常见的标志位包括零标志位结果是否为0。进位标志位无符号数运算是否产生进位或借位。溢出标志位有符号数运算结果是否超出表示范围。符号标志位结果的符号正负。这些标志位直接影响后续的条件跳转指令如JZ,JC是程序实现分支、循环等控制逻辑的基础。现代CPU通常有多个ALU以支持超标量执行。4.2 寄存器堆CPU的“超高速工作台”寄存器是CPU内部最快、最小的存储单元用于存放当前正在被操作的数据和地址。你可以把它想象成工程师手边的工作台所有最常用、最紧急的工具和零件都放在上面随手可取无需跑到远处的仓库内存去拿。寄存器分为几类通用寄存器用于存放操作数和结果。x86架构有EAX, EBX, ECX, EDX等ARM架构有R0-R15。数量有限是编译器优化的重要资源。专用寄存器程序计数器存放下一条要执行的指令地址。栈指针寄存器指向当前栈顶地址用于函数调用、局部变量存储。帧指针寄存器协助栈指针管理函数调用栈。状态/标志寄存器存放ALU产生的状态标志。寄存器重命名是现代CPU的一项关键技术。由于架构寄存器数量有限如x86只有十几个通用寄存器但流水线中同时存在大量未完成的指令它们可能争用同一个架构寄存器。CPU内部实际上维护着一组数量更多的“物理寄存器”。重命名机制将指令中的架构寄存器映射到空闲的物理寄存器从而消除“假数据依赖”为乱序执行创造更多机会。4.3 控制单元流水线的“交通警察”控制单元是CPU的指挥中枢但它并不直接参与计算。它的职责是协调所有其他部件的工作节奏。在流水线CPU中控制单元负责生成精确的时序和控制信号确保指令在流水线的每一级都能正确流动处理各种冒险管理分支预测的提交与回滚。在现代微架构中许多控制逻辑已经通过微码实现。微码可以理解为“指令的指令”是一段存储在CPU内部ROM中的更底层的控制序列。当遇到复杂指令如x86的字符串操作指令REP MOVSB时控制单元会触发对应的微码序列将其分解为一系列简单的、硬件直接支持的微操作。这简化了硬件设计也便于通过更新微码来修复CPU的设计缺陷。4.4 内存管理单元与缓存体系CPU的速度与内存的速度之间存在巨大的“剪刀差”这个差距被称为“内存墙”。MMU和缓存体系是应对这道墙的主要武器。内存管理单元MMU负责将程序使用的“虚拟地址”转换为物理内存的“物理地址”。它通过页表来实现这一转换并同时提供内存保护机制防止程序访问非法内存区域和虚拟内存支持通过页面置换让程序可以使用比物理内存更大的地址空间。缓存体系缓存是位于CPU核心和主内存之间的小容量、超高速静态存储器。它基于“局部性原理”工作时间局部性刚被访问的数据很可能很快再次被访问。空间局部性访问某个地址的数据后其附近地址的数据也很可能被访问。现代CPU采用多级缓存结构L1缓存速度最快容量最小通常每核心32-64KB紧挨着核心。如前所述通常分为指令缓存和数据缓存。L2缓存速度稍慢容量较大通常每核心256KB-1MB。可能是每个核心私有也可能是核心间共享。L3缓存速度更慢容量更大通常几MB到几十MB由同一芯片上的所有核心共享用于核心间数据交换和容纳更多可能被用到的数据。L4缓存不常见通常使用eDRAM容量更大但速度比SRAM慢。缓存的工作机制涉及复杂的缓存行通常是64字节、映射策略直接映射、组相联、全相联和替换算法如LRU。缓存命中意味着数据在缓存中找到CPU可以极速访问缓存未命中则意味着需要花费数百个时钟周期去访问主内存这是性能损失的主要来源之一。地址生成单元是一个常被忽视但非常重要的组件。它专门负责计算指令中涉及的内存地址如数组索引、指针偏移将这个耗时操作从主ALU中剥离出来由专用硬件并行处理从而提升整体效率。5. 提升性能的现代架构技术在掌握了基本组件和工作流程后我们来看看现代CPU为了突破性能极限都祭出了哪些“黑科技”。5.1 指令级并行更深的流水线与推测执行ILP的目标是在一个CPU核心内部让多条指令同时处于执行状态。更深的流水线将指令处理拆分成更多、更细的步骤如Intel NetBurst架构的Pentium 4有长达31级的流水线。更深流水线可以提高时钟频率但也会增加分支预测错误时的惩罚需要清空的流水线级数更多并加剧数据冒险。分支预测这是解决控制冒险的关键。CPU会基于历史记录局部历史、全局历史甚至机器学习算法预测条件跳转指令最可能走向的分支并提前从预测的路径取指执行。现代CPU的分支预测器准确率可以超过95%。如果预测错误则需要清空错误路径上已执行的指令造成性能损失。推测执行在分支预测的基础上不仅提前取指还提前执行预测路径上的指令并暂存结果。如果预测正确结果被提交获得了性能收益如果预测错误结果被丢弃。推测执行是乱序执行的重要组成部分但它也引入了安全漏洞如Spectre和Meltdown因为这些被推测执行但未提交的指令可能会在缓存等微架构状态中留下痕迹。5.2 线程级并行多核与多线程当单个核心的ILP挖掘遇到瓶颈时TLP通过增加“工人”数量来提升整体吞吐量。多核处理器在一个物理CPU芯片内集成多个完整的处理核心。每个核心拥有独立的执行单元、寄存器和L1/L2缓存但共享L3缓存、内存控制器和系统总线。操作系统可以将多个线程或进程调度到不同的核心上真正并行执行。这是过去十几年提升CPU性能的主要途径。同时多线程也称为超线程技术。它让一个物理核心在逻辑上模拟出两个或多个逻辑核心。这些逻辑核心共享大部分执行资源ALU、缓存但拥有各自独立的架构状态寄存器、程序计数器。当其中一个线程在等待内存数据发生缓存未命中时另一个线程可以立刻使用空闲的执行单元从而隐藏内存访问延迟提高资源利用率。HT/SMT通常能带来15-30%的性能提升但高度依赖于工作负载。5.3 数据级并行SIMD向量化SIMD意为“单指令流多数据流”。它通过一条指令同时处理多个数据元素非常适合多媒体处理、科学计算、图形渲染等数据并行度高的场景。原理CPU配备有宽寄存器如128位的XMM256位的YMM512位的ZMM和对应的向量执行单元。一条SIMD指令如PADDB可以一次性完成16对8位整数的加法。演进从Intel的MMX整型到SSE/SSE2支持浮点再到AVX、AVX-512向量宽度和指令集不断扩展。ARM架构也有NEON、SVE等SIMD扩展。应用编译器自动向量化、手工内联汇编、使用编译器提供的内部函数都可以利用SIMD能力。对于性能关键的循环SIMD优化往往能带来数倍甚至数十倍的加速。5.4 能效与电源管理随着晶体管密度逼近物理极限功耗和发热已成为比纯粹性能更严峻的挑战。现代CPU架构深度集成了电源管理技术动态电压与频率缩放根据负载情况动态调整CPU核心的工作电压和频率。轻载时降频降压以节省功耗重载时升压升频以提供性能。核心休眠与唤醒在移动设备和服务器中CPU可以关闭完全空闲的核心的电源仅保留必要核心活动。睿频加速技术在散热和功耗允许的范围内短时间内将单个或少数核心的频率提升到远高于基础频率的水平以应对突发的高单线程负载。异构计算如ARM的big.LITTLE架构将高性能大核与高能效小核集成在同一芯片上。操作系统根据任务需求将线程调度到合适的核心上在性能和续航间取得平衡。苹果的M系列芯片、Intel的12代及以后酷睿处理器性能核能效核也采用了类似思想。6. 主流架构流派CISC vs RISCCPU架构的世界并非铁板一块长期存在着两大设计哲学的对立与融合复杂指令集计算机和精简指令集计算机。6.1 CISC功能强大的“瑞士军刀”CISC的代表是x86架构及其64位扩展x86-64。它的设计初衷是让单条指令能完成更复杂的工作从而减少程序所需的指令条数节省当时宝贵的内存空间并简化编译器设计。特点指令长度不固定格式复杂。指令功能强大一条指令可能完成内存读取、运算、再写回内存等多个操作。寻址方式丰富。大量指令可以直接操作内存。优势代码密度高早期对编译器友好。劣势指令译码电路极其复杂难以实现深流水线和乱序执行单个指令执行周期长且不定。6.2 RISC简单高效的“专用工具”RISC的代表是ARM、MIPS、RISC-V等架构。它的核心理念是简化指令让每条指令都在一个或少数几个时钟周期内完成从而通过提高时钟频率和指令吞吐率来获得高性能。特点指令长度固定格式规整通常是32位或16位/32位混合。指令功能简单只完成基本操作如寄存器-寄存器运算。寻址方式少通常只有加载和存储指令可以访问内存。采用“加载-存储”架构运算只在寄存器间进行。优势硬件设计简单易于实现高主频、深流水线、超标量和乱序执行。功耗控制优秀。劣势完成相同任务可能需要更多条指令代码密度可能较低。6.3 现代的融合与内部实现有趣的是今天的CISC和RISC在外部表现和内部实现上已经出现了深刻的融合。外部x86CISC通过不断扩展指令集SSE, AVX来增强性能ARMRISC的指令集也变得越来越丰富。内部这是关键。现代x86 CPU如Intel Core, AMD Ryzen在内部首先将复杂的x86指令解码成一系列更简单的、类似RISC的“微操作”。然后这些微操作被送入一个基于RISC理念设计的、深流水线、乱序执行的后端进行处理。也就是说现代的x86 CPU本质上是一个“RISC核心”前端套了一个“CISC到RISC的翻译层”。而ARM架构尤其是其高性能核心如Cortex-X系列其内部微架构的复杂度和先进性超标量、乱序执行、分支预测已不逊于顶级x86设计。选择x86还是ARM在今天更多地是生态Windows/macOS/Linux桌面服务器 vs. 移动/嵌入式、软件兼容性和功耗需求的考量而非纯粹的“CISC vs RISC”性能之争。新兴的RISC-V架构则将RISC理念推向极致。它采用完全开源、模块化的指令集设计允许厂商根据应用场景从物联网微控制器到高性能计算自由裁剪和扩展指令集避免了历史包袱代表了处理器架构的一种新范式。7. 性能评估与常见问题排查理解了架构我们最终要回到实际问题如何评估CPU性能以及当遇到性能问题时如何从架构层面思考排查7.1 性能指标的多维度视角切勿只看“主频”。IPC每时钟周期指令数。这是衡量CPU微架构效率的核心指标。高主频但低IPC的CPU实际性能可能不如低主频但高IPC的CPU。IPC受流水线效率、缓存命中率、分支预测准确率、执行单元数量等多重因素影响。缓存容量、层级、延迟和带宽。大容量、低延迟的缓存能极大缓解内存墙问题。特别是L3缓存在多核共享工作负载中至关重要。内存支持支持的内存类型DDR4, DDR5、通道数、频率和时序。这决定了CPU与主内存之间的数据通路宽度和速度。核心/线程数对于高度并行的应用视频渲染、科学计算、编译更多核心能带来近乎线性的提升。但对于单线程或低并行度应用核心数过多收益甚微。单核性能 vs. 多核性能游戏、日常办公等应用更依赖强大的单核性能内容创作、虚拟机、服务器应用则更需要均衡的多核性能。能效比每瓦特性能。对于笔记本、手机、数据中心这往往是比绝对性能更重要的指标。7.2 常见性能问题与架构级排查思路当你发现程序或系统“CPU占用高但速度慢”时可以从以下架构层面思考缓存未命中率高现象CPU占用率很高但IPC很低性能计数器显示大量的L2/LLC Miss。可能原因代码数据访问模式不友好大量随机访问、步长过大导致缓存行利用率低、数据结构设计不佳“伪共享”问题、工作集大小远超缓存容量。排查工具perf(Linux)、VTune(Intel)、AMD uProf等性能分析工具可以定位热点函数和缓存未命中情况。优化方向优化数据结构布局结构体成员对齐、将频繁访问的数据放在一起、使用更紧凑的数据类型、采用分块算法以提升数据局部性。分支预测失败率高现象在包含大量条件判断尤其是不可预测的判断如数据依赖的if的循环中性能低下。可能原因分支模式随机预测器无法学习。排查工具性能分析工具中的分支预测失败计数器。优化方向如果可能重写算法减少分支使用条件传送指令如x86的CMOV替代分支对数据进行预排序使分支模式更可预测。指令吞吐瓶颈现象CPU的某个特定执行端口利用率持续饱和如端口0的ALU而其他端口空闲。可能原因代码中存在长依赖链或者密集使用某一类特定指令如除法、复杂的向量操作导致该功能单元成为瓶颈。排查工具微架构性能计数器可以监测各端口利用率。优化方向尝试用数学等价变换打破依赖链检查编译器生成的汇编代码看是否有更优的指令序列考虑算法层面的优化。内存带宽瓶颈现象多核并行程序在核心数增加到一定程度后性能不再提升甚至下降。监控显示内存带宽已接近饱和。可能原因程序是“内存带宽绑定”型每个核心都需要频繁与内存交换大量数据。排查工具系统级监控工具如nmon,dstat查看内存带宽使用率。优化方向减少不必要的数据传输优化数据复用如果可能使用计算密度更高的算法考虑使用具有更高内存带宽的平台。错误的核心亲和性与调度现象多线程程序在NUMA架构多路CPU服务器上性能远低于预期。可能原因线程被操作系统调度到远离其所需数据的内存节点上导致远程内存访问延迟极高。排查工具numactl,taskset(Linux)。优化方向使用线程绑定pthread_setaffinity_np或内存绑定策略确保线程及其访问的数据位于同一个NUMA节点内。我个人在实际工作中的体会是性能优化是一个从宏观到微观、层层递进的过程。首先要用 profiling 工具找到最大的“瓶颈”这个瓶颈八成在架构层面有对应的解释如缓存、分支、依赖。然后结合对CPU架构的理解去审视代码和算法寻找改进的机会。很多时候一个简单的数据结构调整或者一个循环的改写带来的性能提升可能远超费尽心思的微优化。理解CPU架构就是为你提供了这样一张“寻宝图”让你知道性能的宝藏可能埋在哪里以及用什么工具去挖掘它。