Concurrency In Python 简明教程
System and Memory Architecture
在设计程序或并发系统时,需要考虑不同的系统和内存架构样式。这非常必要,因为一种系统和内存样式可能适用于一个任务,但可能对其他任务产生错误。
Computer system architectures supporting concurrency
迈克尔·弗林于 1972 年给出了对不同样式的计算机系统架构进行分类的法规。该分类定义了以下四种不同的样式 −
-
单指令流、单数据流 (SISD)
-
单指令流、多数据流 (SIMD)
-
多指令流、单数据流 (MISD)
-
多指令流、多数据流 (MIMD)。
Single instruction stream, single data stream (SISD)
顾名思义,此类系统将具有一个序列输入数据流和一个执行数据流的单个处理单元。它们就像具有并行计算架构的单处理器系统。以下是 SISD 的架构 −
Single instruction stream, multiple data stream (SIMD)
顾名思义,此类系统将具有多个输入数据流和数量的处理单元,这些处理单元可以在任何给定时间作用于单个指令。它们就像具有并行计算架构的多处理器系统。以下是 SIMD 的架构 −
SIMD 的最佳示例是显卡。这些卡具有数百个单独的处理单元。如果我们讨论 SISD 和 SIMD 之间的计算差异,那么对于添加数组 [5, 15, 20] 和 [15, 25, 10], SISD 架构必须执行三个不同的添加运算。另一方面,使用 SIMD 架构,我们可以在单个添加运算中添加它们。
Multiple Instruction Single Data (MISD) stream
具有多指令单数据流的数据流的系统具有多个处理器单元,这些处理器单元通过对同一数据集执行不同的指令来执行不同的操作。以下是多指令单数据流的架构 −
多指令单数据流架构的代表者目前还不存在于商业领域。
Multiple Instruction Multiple Data (MIMD) stream
在使用多指令多数据流架构的系统中,多处理器系统中的每个处理器可以同时独立地针对不同的数据集执行不同的指令集。这与单指令多数据流架构相反,单指令多数据流架构对多个数据集执行单一操作。以下是多指令多数据流的架构 −
常规的多处理器使用多指令多数据流架构。这些架构基本用于多个应用领域,如计算机辅助设计/计算机辅助制造、仿真、建模、通信交换机等。
Memory architectures supporting concurrency
在使用并发性和并行性等概念时,始终需要加快程序速度。计算机设计师找到的一种解决方案是创建共享内存多计算机,即具有单个物理地址空间的计算机,该地址空间由处理器具有的所有内核访问。在此情况下,可能有多种不同风格的体系结构,但以下三种是重要的体系结构样式 −
UMA (Uniform Memory Access)
在此模型中,所有处理器一致地共享物理内存。所有处理器对所有内存词都具有相等访问时间。每个处理器可能具有私有高速缓存。外围设备遵循一组规则。
当所有处理器对所有外围设备具有相等访问权限时,该系统称为 symmetric multiprocessor 。当只有一个或几个处理器可以访问外围设备时,该系统称为 asymmetric multiprocessor 。