An active message (AM) is a type of inter-process communication used in computing, whereby a computer program's subroutine or function can be executed by a completely different computer than where it resides. This type of message is of such a fundamental format that it allows for greater utilization of network bandwidth over standard Internet protocols (IP). It is also considered an asynchronous message passing system, in that it is acted upon immediately instead of waiting for a particular moment to synchronize with the program.
With the active messaging communication model, much of the work happens at the hardware level where the hardware interacts with the operating system's drivers. Being that this lower level is normally reserved for the operating system's business, the messages are constructed in such a way that they are able to carry instructions for accessing a sequence of upper-level user functions. Inside the header of an AM is the address of what's referred to as a handler. The handler is special user-level instruction that allows for the message body to be processed by a computation running through the processor. The body of an active message, then, is the function's argument, or the data that the computation needs to act upon.
Given the essential nature of an active message's construction, it is capable of passing over existing IP network communication protocols. The primary difference, however, is that it is acted upon instantly on receipt, as opposed to requiring a multi-phased, send, acknowledge receipt, delivery method. In this way, an active message considers the network simply an open pipe for traversal. Its only limitations are those of the physical network, where distance between nodes may factor in message latency.
The way an active message system works is by a sender filling the network with messages. There is no buffering on the receiving end, whose only response to an AM is to briefly interrupt its computation for the message's handler, grab the message from the network and go on about its business. The only time message buffering does occur is on the sender's end, where messages are held up based on whether the network is reaching its limits. A polling method keeps tabs on the network so the system knows when to inject more messages. Active messages thereby allow for the continual overlap of messages sent with the computations occurring on remote machines, as well as keep them all coordinated.
While the active message method may be simple in nature, it faces a few issues with respect to implementation. Even though they're of such primitive construction, custom-designed interface drivers are often required to handle the messages for a computer system. The active messages are also designed for operating among computer nodes that are all running the same program. This way, the instructions sent and received are specific to the program already running on the destination computer.
Due to their nature, active messages have found extensive use in parallel computing environments, such as single process, multiple data (SPMD) applications. These programs run on large networks of computer systems where active messages are used for passing instructions and data among the machines. Such distributed systems make use of the method to efficiently process massive amounts of data that would otherwise take too long on a single machine.