到底什么是组通信呢???今天就在这里跟大家剖析一下
序:
我们前面所讲的进程通信都是属于两个进程间的通信。有时,通信不仅仅存在于两 个进程之间,而是涉及两个以上的多个进程。例如为了容错,一个文件可能会有多个副 本,这时候需要多个文件服务员管理同一个文件。在这样的系统中,可能会要求一个顾客 将同一个报文发送到所有的文件服务员,以保证在有节点崩溃的情况下,顾客的请求能够 得到执行。组通信机制有许多方面的应用,如多副本的更新、视频/音频会议等。所谓组 通信,指的是一个报文能够被发送到多个接收者的通信。
1.组通信的概念:
两个进程之间的通信称为一对一(One-to-One)的通信或点对点(Point-to-Point)的通 信。一对一通信中的寻址方式分为显式(Explicit)寻址和隐式(Implicit)寻址两种。显式 寻址通信中要求明确地以参数的形式给出通信的对方进程,这就是所谓的 unicast。而在 隐式寻址的通信中,只需给出服务的名字,而不是指出一个特定的进程,在这种情况下,任 何一个提供这种服务的服务员都可以接收这个报文,但只有一个服务员接收这个报文,这 就是所谓的 anycast。隐式寻址通信中的 send 原语可以看成是 send_to_any 命令,而 receive 原语可以看成是 receive_from_any 命令。 组通信对于并行和分布式系统是非常有用的。
组通信进一步可分为 3 种情况。
(1)一到多(One-to-Many)通信。在这种情况下,对于一个报文来说,它只有一个发送 者,但是却有多个接收者。这种通信方式就是我们所熟知的组播(Multicast)通信。如果所 有的接收者都在某个网络上,并且网络中的所有成员都是接收者,那么这种一到多通信又 称为广播(Broadeast)通信。同隐式寻址的点对点通信不同的是,一到多通信中的接收组 的每个成员都要接收这个报文。一到多通信对于许多应用是非常有用的,例如,定位一个 可用的服务员,或向某个组通报某个问题等。
(2)多到一(Many-to-One)通信。在这种情况下,有多个发送者但是只有一个接收者。 同隐式寻址的点对点通信一样,唯一的接收者从一组发送者中接收报文。同隐式寻址的 点对点通信所不同的是,隐式寻址的点对点通信只从一组发送者中的一个发送者中接收 报文,而多到一通信还可以从一组发送者中的几个或所有发送者中接收报文。
(3)多到多(Many-to-Many)通信。在这种情况下,有多个发送者和多个接收者。在这 种通信方式中,比较困难的是报文的排序工作。
2.接收报文的三种顺序
我们按接收语义从最松弛到最严格的顺序分成以下 3 种:捎带顺序、一致顺序、全局
顺序。
捎带顺序语义是一种最松弛的但又最快的排序语义.这种语义保证了如果报文捎带了标识这些报文之间关联的一些信息,那么报文就能够以一种正确的顺序接收。
一致顺序语义要求所有接收者按完全相同的顺序接受报文,但是,一组报文的发送顺 序和被接收的顺序可能是不同的。
全局顺序语义是最严格的语义。这种语义要求所有的接收者严格地按照报文的发送 顺序接收。这就需要一个全局时钟,也就是说不同系统中进程的时钟是必需经过同步或 使用全局时间戳。
在组通信中,组是动态的,就是说在系统中可以生成一个新的组,也可以删除一个旧 的组。同时,一个进程可以加入一个组中,或者说从一个组中删除一个进程。一个进程可 能同时是多个组的成员。所以,需要一种机制来管理组和组成员,例如,Internet 中的 ICMP (Internet Group Management Protocol)。
组通信的一个最典型的例子就是 USENET 中的新闻组,在 USENET 中有许多新闻组, 每个新闻组都有一个主题。当某人向某个新闻组发送一个报文时,这个组的所有成员会 收到这个报文,即使这个组中有成千上万个成员。新闻组是一个高层的组通信服务,高层 组通信中的通信规则(如谁是组中的一个成员和采用什么样的报文传送语义)远不如操作 系统中的组通信那么严格,因为,在大多数情况下,这种不严格并不是什么问题。
3.组通信实现方式所依赖的硬件
组通信的实现方式在很大程度上依赖于硬件:以下是3种情况
(1)在某些网络上,可以生成一种特殊的地址(如将地址的某些高位置 1),网络中的
多台机器可以监听该地址,当一个报文发送到该地址时,该报文能自动地传送到监听该地
址的所有机器上。这种网络通信技术称为组播通信。使用组播通信实现组通信是很方便
的,只需要给每个组一个不同的组播地址即可。
(2)有些网络虽然不支持组播通信,但是支持广播通信,即含有某种特殊目的地址的
报文可以被网络中的所有机器接收。广播通信技术可以支持组通信,但是相对来说要比
组播低效一些。因为报文传送到网络中每台机器上,所以每台机器的软件需要检测自己
的机器是否属于报文中目的地址所指定的组,如果不属于,该报文就被丢弃,但还是要浪
费处理中断的时间。尽管如此,发送者仍然只需要发送一个报文,组内的所有接收者都可
以收到。
(3)如果一个网络既不支持组播又不支持广播,仍然可以实现组通信,尽管比较低
效。实现方法是让发送者将报文向一个组内的所有接收者各发送一次,如果一个组内有N
个成员,发送者需要发送 N 个报文副本。