Buffered Send
The blocking buffered send MPI_Bsend copies the data from the message buffer to a user-supplied buffer and then returns. The data will be copied from the user-supplied buffer over the network once the "ready to receive" notification has arrived.

This has several implications, most of them positive:
- timing of the corresponding receive is irrelevant
- data in the original buffer can be modified
- synchronization overhead on the sender is eliminated
- system overhead is added
The sending task can then proceed with calculations that modify the original message buffer, knowing that these modifications will not be reflected in the data actually sent.

Buffered mode incurs extra system overhead because of the additional copy from the message buffer to the user-supplied buffer. On the other hand, synchronization overhead is eliminated on the sending task—the timing of the receive is now irrelevant to the sender. Synchronization overhead can still be incurred by the receiving task, though, because it must block until the send has been completed.
In buffered mode, the programmer is responsible for allocating and managing the data buffer (one per process) by using calls to MPI_Buffer_attach and MPI_Buffer_detach. This has the advantage of providing increased control over the system, but also requires the programmer to safely manage this space. If a buffered-mode send requires more buffer space than is available, an error will be generated, and (by default) the program will exit.