找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

394

积分

0

好友

48

主题
发表于 昨天 05:45 | 查看: 5| 回复: 0

在数字计算机的整个发展历程中,有两个核心需求持续驱动着技术的进步:其一是我们希望计算机能够处理更多任务,其二则是我们希望计算机的运行速度越来越快。当处理器能够同时执行更多操作时,这两个目标便能同时得到推进。

这里涉及两个关键术语:并发 (Concurrency) 和 并行 (Parallelism)。并发是一个通用概念,指一个系统能够同时处理多个任务;而并行则特指利用并发技术来提升系统的整体运行速度。并行可以在计算机系统的多个抽象层次上实现,下面我们将按照系统层次由高到低的顺序,来详细探讨这些不同的层次。

1. 线程级并发

基于进程这一抽象概念,我们可以设计出能够同时运行多个程序的系统,这就引入了并发的使用。更进一步,通过线程,我们甚至能在单个进程内部执行多个控制流。自上世纪60年代分时系统出现以来,计算机便开始支持并发执行。

在传统意义上,这种并发执行是通过单处理器在多个进程之间快速切换来模拟实现的,就像一个杂耍艺人同时抛接多个球。这种并发形式允许多个用户同时与系统交互(例如多人同时访问Web服务器),也允许单个用户同时进行多项任务(例如边用浏览器上网,边用字处理器写作,同时还在播放音乐)。在过去,即便处理器需要在任务间切换,主要的计算工作仍由单个处理器完成,这种配置被称为单处理器系统。

当我们构建一个由单一操作系统内核控制的、包含多个处理器的系统时,就得到了一个多处理器系统。下图展示了不同的处理器配置分类:

单处理器与多处理器(多核与超线程)架构对比示意图

多核处理器 是将多个CPU(称为“核”)集成到单个集成电路芯片上的技术。下图展示了一个典型多核处理器的组织架构,该微处理器芯片包含4个CPU核,每个核都拥有自己独立的L1和L2高速缓存(其中L1缓存通常分为指令缓存和数据缓存)。这些核共享更高级别的缓存以及到主内存的接口。业界专家预测,未来一个芯片上集成数十甚至上百个核将成为可能。

多核处理器缓存层次结构示意图

超线程,有时也称为 同时多线程 (Simultaneous Multi-threading),是一项允许单个CPU核心执行多个控制流的技术。它通过复制CPU的部分硬件(如程序计数器和寄存器文件)来实现,而其他硬件单元(如浮点运算单元)则保持一份。传统处理器在不同线程间切换可能需要约20000个时钟周期,而超线程处理器可以在单个周期内决定执行哪一个线程,从而更高效地利用CPU资源。例如,当一个线程需要等待数据加载到缓存时,CPU可以立即切换到执行另一个线程。以Intel Core i7处理器为例,每个核心可以执行两个线程,因此一个四核系统实际上能够并行执行8个线程。

多处理器的应用从两个方面提升了系统性能:

  • 首先,它减少了过去在执行多任务时模拟并发的需要。如今,即使是个人用户使用的电脑也需要并发处理多个活动。
  • 其次,它能够显著加快应用程序的运行速度,但这要求程序本身是以多线程方式编写,以便其线程能够被高效地并行执行。

因此,尽管并发原理的研究已超过半个世纪,但多核和超线程系统的兴起,才真正激发了开发者们去探索如何编写能够充分利用硬件线程级并行性的应用程序。

2. 指令级并行

在更低的抽象层次上,现代处理器具备一种称为 指令级并行 的属性,即能够同时执行多条指令。早期的微处理器(如1978年的Intel 8086)执行一条指令需要多个(通常是3到10个)时钟周期。而现代的处理器能够维持每个时钟周期执行2到4条指令的速率。实际上,每条指令从开始到结束可能需要更长的周期(大约20个或更多),但处理器采用了大量精巧的设计,使其能够同时处理多达上百条指令。

这其中关键技术之一是 流水线。它将执行一条指令所需的活动划分为多个步骤,并将处理器硬件组织成一系列的阶段,每个阶段负责一个步骤。这些阶段可以并行运作,分别处理不同指令的不同部分。

如果处理器的执行速率能够超过每个周期一条指令,则称之为 超标量处理器。目前,大多数现代处理器都支持超标量操作。

3. 单指令、多数据并行

在最低的硬件层次,许多现代处理器配备了特殊的硬件,允许 一条指令产生多个可以并行执行的操作,这种方式被称为 单指令、多数据 并行,即 SIMD。例如,较新世代的Intel和AMD处理器都包含了能同时对多组单精度浮点数(C语言中的float类型)进行加法的指令。

提供这些SIMD指令主要是为了加速处理图像、声音和视频数据的应用程序。虽然有些编译器会尝试自动从C程序中提取SIMD并行性,但更可靠的方法是使用编译器支持的特殊的向量数据类型来编写程序,例如GCC编译器就支持此类数据类型。

理解并发与并行的底层原理,是构建高性能、可扩展系统的基石。希望这篇关于计算机体系结构中并发与并行基础的梳理,能帮助你更清晰地认识这些核心概念。更多深入的计算机基础与系统架构讨论,欢迎在云栈社区交流探讨。




上一篇:开源后端框架PocketBase:Go与SQLite驱动的实时API与快速开发利器
下一篇:Qoder 发布首个自进化智能体 Quest,实现真正的自主编程
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-18 19:48 , Processed in 0.443667 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表