热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

就MPI_Send和MPI_Isend谈阻塞通信与非阻塞通信

同步通信和异步通信(1)同步通信(synchronousmessagepassing):指收发双方两个进程在消息未被确切的发出并收到之前都不能返回。这种例程一般不需要消息缓冲区。&ldquo

同步通信和异步通信
(1) 同步通信(synchronous message passing) :

收/发双方两个进程在消息未被确切的发出并收到之前都不能返回

这种例程一般不需要消息缓冲区
“返回”是指进程可以执行通信语句之后的下一条语句。
在同步通信中,通信可以是异步开始的,但必将是同步结束的。
同步通信实际上完成两个动作:
传送数据和进程的同步
(2) 异步通信 (asynchronous message passing) :

在异步通信中,通信可以是异步开始的,也可以是异步结束。发送方或接受方是否返回只取决于单方面的意愿。
异步通信需要系统提供一个消息缓冲区(message buffer),而同步通信则需要制定好一个收/发双方的“握手” (handshaking) 协议。
异步的消息传递原语在实现上又可分为:
阻塞的 ( blocking ) 消息传递
非阻塞的 ( nonblocking ) 消息传递

阻塞的消息传递
阻塞发送:在消息确实已经发送出去(到消息缓冲区)后,才允许进程继续执行下一语句。
阻塞接收:进程处于挂起状态,直到可以在消息缓冲区确切地接收到消息后,才允许进程继续执行下一语句。
此处阻塞的含义与同步操作是类似的。
非阻塞的消息传递
非阻塞发送:发送原语通知系统将要发送的消息在消息缓冲区中后,即可返回。发送进程可继续执行后续工作, 无须等待系统真正发送消息。
非阻塞接收:接收原语不管消息缓冲区中是否已有发送原语发送的消息,都将返回。
在非阻塞的消息传递中,
当消息被确切地发出或收到时,系统将用中断信号通知发送方或接受方。
在此之前,它们可以周期性地查询、暂时挂起或执行其它计算,以实现计算与通信的重叠。
采用非阻塞的消息传递将导致程序调试困难。
不论是阻塞通信还是非阻塞通信,都属于异步通信机制。
其设置目的在于让通信与计算重叠,提高并行执行效率。
但其付出的代价是系统要提供消息缓冲区。


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了一个误删Oracle数据文件导致数据库无法打开的问题,并提供了解决方式。解决方式包括切换到mount状态、离线删除报错的数据文件等。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 一直没有对java中的一些图像概念进行区分,一下子区分的太多了会乱,这么先来个简单的吧:ImageIO可以把一个图片转换成Buffered ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
author-avatar
forsoz_627
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有