I need to transfer data from multiple sources to one destination.
The requirement is:

(1) The sources and destination nodes may work asynchronously.

(2) Each source node generates data package in their own paces.
And, there may be many packages to send. Whenever, a data package
is generated , it should be sent to the desination node at once.
And then, the source node continue to work on generating the next
package.

(3) There is only one destination node , which must receive all data
package generated from the source nodes.
Because the source and destination nodes may work asynchronously,
the destination node should not wait for a specific source node until
the source node sends out its data.

The destination node should be able to receive data package
from anyone source node whenever the data package is available in a
source node.

My question is :

What MPI function should be used to implement the protocol above ?

If I use MPI_Send/Recv, they are blocking function. The destination
node have to wait for one node until its data is available.

The communication overhead is too high.

If I use MPI_Bsend, the destination node has to use MPI_Recv to ,
a Blocking receive for a message .

This can make the destination node wait for only one source node and
actually other source nodes may have data avaiable.