Programming Using the Message-Passing Paradigm(使用消息传递模式编程)

消息传递编程的原理

两个关键特性:假设存在一个分块地址空间(个人理解就是物理内存分块,每个处理器对应一块局部内存),只支持显示并行化

分块地址空间的含义:
1. 每一数据单元必须属于空间的分块之一(属于某一个局部内存),数据必须被显示地划分和存放。(促进存取本地化,对非UMA结构很重要)。
2. 所有的相互操作需要两个进程间的协作。

消息传递程序的结构:
1. 异步:所有的并发任务都异步执行,由于存在竞争条件可能导致不确定的行为
2. 松散同步:同步执行交互,但是交互之间任务的执行是完全异步的

绝大多数消息传递程序使用单程序多数据(SPMD)方法来编写。如果不同处理器执行的是不同的程序,这样很难扩展(分布式计算的目的是提高某一个程序的运行效率,而不是同时执行两个不相干的程序)

操作构件:发送和接收操作

绝大多数消息传输平台都有另外的硬件来支持消息的发送和接收,他们能支持DMA和使用网络接口硬件的异步消息传输。这两者都不需要CPU的干预,所以在调用send之后就在通信完成之前返回了,如果下面代码修改了发送的内存位置的值,可能导致发送给另一个进程的值不对。

阻塞式消息传递操作
1. 阻塞式无缓冲发送/接收:会出现空闲开销,以及更容易出现死锁(两个进程都在阻塞发送)。
2. 阻塞式有缓冲发送/接收:也可能发生死锁(两个进程都在接收阻塞)有通信硬件则可以负责将发送方缓冲区内容发送到接收方缓冲区内容。否则则需要一端中断传输数据

你可能感兴趣的:(分布式计算,并行计算导论)