The functions of a messaging interface can differ in the degree of synchronization between the communication participants:
The completion of a send operation in synchronous communication implies that the data has been received by the receiver. The term emphasizes that communication synchronizes the execution of the sender with the execution of the receiver.
The completion of a send operation in asynchronous communication does not imply that the data has been received by the receiver.
There is a distinction between blocking and synchronization. While blocking is typically understood to refer to programming language functions, synchronization is often understood to refer to communication operations which may involve calling several programming language functions. Thus, a nonblocking synchronous communication is not an oxymoron, but a legal combination of properties which can be achieved by employing a nonblocking send function that uses callback or polling to notify of message reception.