Messages are pushed into the low-level communication runtime
through a call to a2a_send(). The communication runtime aggregates these small messages on a per-destination basis, buffering
them into coalescing buffers (one per destination) until enough data
is ready to be sent to each destination. Upon receiving these
messages, the invocation of message handlers takes the form of
events being signaled in the application throughalgo_recv_msg(),
which can be defined by the user, and is associated with a communication channel at initialization time. At the end of each superstep,a2a_sync()is invoked to enforce that all the messages have
been handled before proceeding to the next. Computation stops
when the termination check for the algorithm signals completion in
algo_done()