Synchronous Send
Synchronous Send (MPI_Ssend) is the safest Point-To-Point communication method, as the sending process requires the receiving process to provide a "ready" signal, or the matching receive, in order to initiate the send; therefore, the receiving process will always be ready to receive data from the sender.

In another diagram below, time increases from left to right. The heavy horizontal line marked S represents the execution time of the sending task (on one node), and the heavy dashed line marked R represents the execution time of the receiving task (on a second node). Breaks in these lines represent interruptions due to the message-passing event.

Message transfer must be preceded by a sender-receiver handshake. When the blocking synchronous send, MPI_Ssend, is executed, the sending task sends the receiving task a "ready to send" message. When the receiver executes the receive call, it sends a "ready to receive" message. Once both processes have successfully received the other's "ready" message, the actual data transfer can begin.
In the diagram above, the sender is shown waiting for the receiver to become available, but this delay can also occur in the other direction. If the receiver posts a blocking receive first, then the synchronization delay will occur on the receiving side. Given large numbers of independent processes on disparate systems, keeping them in sync is a challenging task and separate processes can rapidly get out of sync causing, fairly major synchronization overhead. MPI_Barrier() can be used to try to keep nodes in sync, but probably doesn't reduce actual overhead. MPI_Barrier() blocks processing until all tasks have checked in (i.e., synced up), so repeatedly calling Barrier tends to just shift synchronization overhead out of MPI_Send/Recv and into the Barrier calls.