Efficient communication between processors is criticial in multiprocessor and multicore embedded designs. How the software will take advantage of the underlying hardware support structure is equally important. Almost any software layer can be placed between the hardware and distributed applications. Still, communication efficiency often dictates a close match between hardware and software.
In multiple-processor environments, things get difficult when embedded designers encounter interprocessor connections designed to take advantage of a particular processor's environment. For example, multicore processors often incorporate a shared memory system or a mailbox system that operates very quickly but is impractical with greater physical processor separation. On the other hand, connectivity such as Ethernet can handle longer distances but with significantly more overhead and latency than other interprocessor communication methods.