Applications such as code downloading, message batching, gather/scatter and mobile agents follow the client-server model of interaction. A closer look reveals that all of them group a set of operations, and submit them to a server for execution. The submission of operations is aimed at reducing domain-crossings and/or allow dynamic server extension. For instance, code downloading into operating system kernels is intended to save domain-crossings and at the same time to allow system extension. Message batching and mobile agents are intended to save domain-crossings.
Consider a program using a file server like that of figure 1. On typical client-server interaction, the client sends a command (read, write) to the server, waits for the reply, and then continues.
Suppose that read and write are handled by the same server and that cross-domain calls (i.e. calls from client to server) are much heavier than calls made within the server. Then it would be much more efficient to send the whole while loop to the file server for execution.
Instead of having multiple cross domain calls (figure 2.a) a single one suffices if the client sends the code to the server for its execution (figure 2.b). To do so, it is convenient to extend the file server to allow the execution of programs submitted by different clients.