消息发送与接收的方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非阻塞消息传递操作(续)
无专门硬件与有专门硬件时无缓冲模式非 阻塞通信图示
发送进程 接收进程 发送进程 接收进程
send
请求 应答
recv
send
请求 应答
recv
数据不安全
数据 不安 全
数据 不安 全
2018/11/11
11
国防科学技术大学并行与分布处理重点实验室
各种方式的通信操作比较
2018/11/11
缓冲模式阻塞发送/接收操作(续)
由于接收端必须阻塞以保证语义正确性而 导致死锁的例子
P0
recv(&a, 1, 1); send(&b, 1, 1);
P1
recv(&a, 1, 0); send(&b, 1, 0);
2018/11/11
9
国防科学技术大学并行与分布处理重点实验室
非阻塞消息传递操作
12
2018/11/11
4
国防科学技术大学并行与分布处理重点实验室
缓冲模式阻塞发送/接收操作
在发送端,当执行到发送操作时,将数据 复制到缓冲区,并在数据复制完毕后就立 即返回 在接收端,接收来的数据也存储到一个缓 冲区中,当接收进程执行到接收操作时, 再去检测数据是否已经在缓冲区中
2018/11/11
国防科学技术大学并行与分布处理重点实验室
消息发送与接收的方式(续)
阻塞式消息传递:无语义正确性问题
缓冲模式 无缓冲模式
wenku.baidu.com
非阻塞式消息传递
缓冲模式 无缓冲模式
2018/11/11
2
国防科学技术大学并行与分布处理重点实验室
无缓冲模式阻塞发送/接收
发送操作直到与之配对的接收操作启动之后,才 在传完数据之后返回。典型方法是采用握手机制 导致进程空闲
国防科学技术大学并行与分布处理重点实验室
消息发送与接收的方式
数据发送与接收的不同方式引起的后果
P0 P1 a=100; recv(&a, 1, 0); send(&a, 1, 1); printf(“%d\n”,a); a=0;
有额外硬件支持通信与计算并行执行时, 可能会出现语义正确性问题。
2018/11/11 1
减少了进程空闲,但增加了数据缓冲开销
一般如果可以预测到发送与接收将几乎同 时到达时,采用无缓冲操作更为有效 对一般应用问题,采用有缓冲操作比较好 在缓冲模式中,也可能由于缓冲区大小的 限制而导致死锁
2018/11/11
7
国防科学技术大学并行与分布处理重点实验室
缓冲模式阻塞发送/接收操作(续)
缓冲区太小导致性能下降的例子
P0 P1
For(k=0;k<10000;k++) { recv(&a,1,0); consume_data(&a); }
For(k=0;k<10000;k++) { produce_data(&a); send(&a,1,1); }
2018/11/11
8
国防科学技术大学并行与分布处理重点实验室
5
国防科学技术大学并行与分布处理重点实验室
缓冲模式阻塞发送/接收操作(续)
有无专门硬件支持时的不同操作方式
发送进程 接收进程 发送进程 接收进程
send recv
send
将数据 复制到 缓冲区
recv
2018/11/11
6
国防科学技术大学并行与分布处理重点实验室
缓冲模式阻塞发送/接收操作(续)
发送进程 接收进程 发送进程 接收进程 发送进程 接收进程
send
请求 应答
recv
请求 应答
recv
send
请求 应答
recv
2018/11/11
3
国防科学技术大学并行与分布处理重点实验室
无缓冲模式阻塞发送/接收(续)
无缓冲模式阻塞操作中的死锁
P0 P1
send(&a,1,1); send(&a,1,0); recv(&b,1,1); recv(&b,1,0);
在缓冲模式下,发送进程在启动复制到缓 冲区的DMA操作后立即返回,返回时 DMA操作可能尚未结束 在无缓冲模式下,发送进程简单地将消息 的状态标识为尚未传输,就返回
在数据进程传输的过程中,可以进行一些 有用而不会引起语义正确性问题的计算
2018/11/11 10
国防科学技术大学并行与分布处理重点实验室