A common and elegant way of structuring IPC is the use of the Upcall concept. If a pair of processes can be viewed as a producer and consumer to each other, it is often the case that one of the processes is an initiator. It is possible to provide a way for the initiator to register procedures with the recipient. When the recipient has information for the initiator, rather than waiting to be called, it asynchronously invoked the appropriate procedure in the initiator. This is analogous to a software interrupt, but allows the same kind of language support that the conventional RPC mechanism does.