Regardless of library, language, or spec, asynchronous send/write operations make sense to me, because code later in the execution path may not have any dependency upon the success or failure of the write operation.However, asynchronous receive/read operations are not motivated for me.Can anyone suggest specific situations or general patterns where async message receipt is useful?ContextMy question is prompted by the MPI specification, but the more general the answer the better.  Specifically, there are blocking calls to communicate between processes or machines:MPI_Send(...)MPI_Recv(...)and there are analogous nonblocking calls that take an additional parameter MPI_Request * parameter to handle the send/receive operations asynchronously:MPI_Isend(..., &request)MPI_Irecv(..., &request)
When are nonblocking read or receive operations useful?
async;io;asynchronous programming
The main reason async read is handy if you still have other work to do or more often because there is another input source you also need to listen to.For example a GUI you need to listen to the user input besides getting the image from the disk. Without asynchronous IO you would need to start a new thread every time you start to read something with a blocking API. This won't scale well.Servers can have several connections active at a time especially when it also communicates with a database and fileserver. 