Question

What is the difference between a process receiving a message and a process delivering a message, in the context of a multicast?

Was it helpful?

Solution

Multicast in distributed computing often assumes that some guarantees, such as causal order, are provided by a protocol layer between the network and the application. This protocol layer might delay messages that have arrived from the network, omit messages, use additional control messages, ... Usually, this is the most important layer, where interesting algorithms are needed.

In this context, when describing such algorithms, receive (and send) is the interface between the protocol layer and the underlying network channels. Deliver (and multicast) is the interface between the protocol layer and the application. It is thus a naming convention to make it easy do distinguish message arrival at different layers, instead of having to say "received at the protocol" (aka received) and "received at the application" (aka delivered).

An example: Assume that you are enforcing causality and have m1->m2. Now assume that m2 arrives to (i.e. is received by) process p before m1. m2 cannot be shown to the application (i.e. delivered) immediately to the application. It can only be delivered after m1 is received and then delivered first.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top