The PVM communication model assumes that any task can send a message to any other PVM task. There is no limit to the number of messages and no limit to their size. The communication does not restrict itself to a particular machine's limitations and always assume that sufficient memory is available. The message buffers are allocated dynamically. Therefore, the maximum message size that can be sent or received is limited only by the amount of available memory on a given host. PVM may give the user a cannot get memory error when the sum of incoming messages exceeds the available memory, but PVM doesn't stop its execution and doesn't remove the host from the configuration.
According to our terminology, the PVM communication model provides only asynchronous blocking sends. Therefore, the PVM user does not have to worry either about any deadlocks for nonmatching pairs of send-receive or about rewriting into a buffer after it has been sent. PVM provides blocking receives and non-blocking receives.
In PVM3 the option PvmRouteDirect, that requests that data be transferred directly from task to task, by-passing the PVM demon. However this option is ignored on the MPPs, on which PVM is build on native systems. The PVM model also guarantees that message order is preserved.