Inter-process communication can be either synchronous or asynchronous. In fact,
the same terms are used at different levels in the literature. In the message passing level,
the synchronous send means that the sender is blocked until the message is received by
the destination process. It not only transfers data but synchronizes the sender and
receiver. The asynchronous send, or no-wait send, means that the sender resumes as soon
as the message is out of its hand (possibly buffered by the network). It achieves a high
degree of parallelism but causes problems such as congestion control. Most of the literature
talks about synchronism at an even higher level, e.g. at the RPC level. That is, synchronous
communication means that the requesting process blocks until it receives the
response, while the asynchronous communication sends requests without waiting for