并发/并行编程与分布式系统(1)

一、介绍

现代复杂的软件系统,使用了单台设备/机器或者多台机器资源,包括内存、CPU、IO、存储等等。比如对于大型的数据分析系统,关注以下几个维度:
1. 分布式:容错性、Replication、负载均衡和调度、Consistency等
2. 并行/并发:并行-并发算法、支持并发的数据结构、同步/异步等等
通过分布式/并发/并行编程技术,核心目的就是为了获取更快的计算速度。本文做一些知识的总结

二、体系结构

2.1 von Neumann Architecture

冯·诺依曼架构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。具有如下主要特点:
在这里插入图片描述

  1. 单处理机结构
  2. 内存中存储程序和数据
  3. CPU从内存中获取指令和数据,指令顺序执行

2.2 Multiprocessor Architecture

基于指令和数据是单/多个,可以分为如下四类:
在这里插入图片描述

现在软件系统,大多都MIMD,即多指令多数据流,处理器可能在不同的数据流上执行不同的指令.

2.3 memory Architecture

主要分为三类:

2.3.1 Shared memory Architecture

特点如下:

  1. 所有处理器可以都可以访问所有的内存
  2. 一个处理器的内存变化可以被所有其他处理器看到

Uniform Memory Access (UMA) Architecture
一致性内存访问架构, 含义如下:使用SMP(Symmetric Multi-Processor )模式,即将多个CPU处理器与一个集中的存储器和I/O总线相连,所有CPU处理器只能访问同一个内存。因此,CPU处理器只能为内存的每个数据保持或共享唯一一个数值。
在这里插入图片描述
Non-Uniform Memory Access (UMA) Architecture
非一致性内存访问架构, 含义如下:
(1)使用多个SMP构成,可以认为物理连接
(2)CPU可以访问局部内存或者其他CPU所拥有的内存(访问时间不同,跨链路的内存访问较慢)
在这里插入图片描述

2.3.2 Distributed memory Architecture

通过网络通信连接处理器的内存

特点如下:

  1. 处理器有属于自己的内存,但是其内存地址无法映射到其他处理器;同时也没有全局的内存地址
  2. 每个处理器可以独立操作,更新自身内存不影响其他处理,因此这里不同处理器,没有Cache一致性
  3. 程序需要定义同步行为、通信方式等等

2.3.3 Hybrid Distributed-Shared Memory Architecture

顾名思义,是上述两种架构的结合
在这里插入图片描述

三、并行程序

在实现一个并行程序,需要想清楚以下几点:

  1. 想清楚可以同时执行的独立的模块或者任务;想清楚是否需要一些协调模块
    比如:常见一个并行程序,用多线程实现1~N的数据累加。指定范围加法就是一个独立的可以同时执行的模块;同时需要一个线程做最后的结果汇总
  2. 设计并行程序有哪些限制和约束,目标是什么
  3. 思考一些临界条件,特别是并发的时候,会不会出错,这也是并发编程最容易出错的地方,可能导致内存泄露、内存写坏,甚至导致结果不正确等严重后果。

3.1 Shared Memory Model

任务共享一个公共地址空间,异步地读写该地址空间。

3.2 Threads Model

  1. 基于逻辑设计,单个进程启动多个线程来同时运行
  2. 每个线程有局部数据,但是也共享进程的一些资源

参考:POSIX库 https://hpc-tutorials.llnl.gov/posix/

3.3 Message Passing Model

在这里插入图片描述

  1. 每个任务在运行时使用自己的内存;不同的任务可以部署在同一台机器或者不同的机器上
  2. 任务之间交换数据通过网络通信方式
  3. 需要有一套对应的发送和接受交互方式

3.4 Data Parallel Model

基于规则/算法对数据集进行划分,从而进行并发。比如对于用数据作为数据的存储结构,可以基于下标划分成多个子任务,分别计算

推荐阅读书籍:

  1. The Art of Multiprocessor Programming 多核编程的艺术
  2. Distributed Computing: Principles, Algorithms, and Systems by Ajay D. Kshemkalyani and Mukesh Singhal 分布式计算- 原理,算法与系统
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值