2.3 Synchronous and asynchronous message passing
Synchronous message passing involves one entity (usually a client) in the message passing process sending a message and a second entity (usually a server) receiving it, carrying out some processing and then sending back some response which the first entity processes in some way. While the second entity is carrying out the processing the first entity pauses waiting for the response.
In asynchronous message passing each entity in the process does not have to wait for the next part of the dialogue they are engaged in and can carry out some other task. For example, the server could be carrying out some processor-intensive task for another service which it provides. This form of message passing, where there is no close coordination between message passing entities, is known as asynchronous message passing.
One way of implementing this would be to place protocol messages on some intermediate queue middleware which would be periodically interrogated by a client; in between interrogating the middleware the client would carry out useful work. This is the idea behind message-oriented middleware.