Microprocessors using multiple cores have improved computing speeds for many applications, although not all applications benefit significantly from multi-core processing. For those types of application that do benefit from a multi-core implementation, the required code can be complex and difficult to maintain because of the need to communicate and coordinate between cores.
One implementation of multi-core software uses Remote Procedure Calls (RPCs) for communication and coordination among cores, but this approach has some shortcomings, notably the associated over-head and software complexity required for client and server cores to implement RPCs. Implementation of the RPC layer involves separating the code onto the two processors or cores, one of which is referred to as the client and the other as the server, and providing a layer to transparently connect the function calls between the client and server. This involves an RPC module on both cores and does not provide an easily maintainable or upgradeable architecture. Furthermore, transfer of data between the cores can consume processing time and memory bandwidth. Finally, in most RPC implementations there is no provision for the client to actively participate in the processing provided by the server, meaning that the processing is completely delegated to the server or remote routine.