# MPI Blocking and non-blocking **Blocking and non-blocking** communication in MPI: `MPI_Send` and `MPI_Recv` block until complete. `MPI_Isend` and `MPI_Irecv` return immediately with a request handle; `MPI_Wait` blocks later. ```c MPI_Request req; int x = 42; MPI_Isend(&x, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &req); do_other_work(); // overlap computation with communication MPI_Wait(&req, MPI_STATUS_IGNORE); // x must not change before this point ``` `MPI_Test` checks whether a request is complete without blocking, returning a flag. `MPI_Waitall` and `MPI_Testall` handle arrays of requests, which is common when a process has posted non-blocking sends to multiple neighbors. Non-blocking communication is the primary tool for hiding communication latency behind useful computation.