Paso de mensajes

De forma abstracta, se llama mensaje a una porción de información que un proceso emisor envía a un destinatario (El cual puede ser otro proceso, un actor o un objeto).

Supone un enfoque opuesto al paradigma tradicional en el cual los procesos, funciones y subrutinas sólo podían ser llamados directamente a través de su nombre.

Entre las ventajas que proporciona este mecanismo destacan el alto nivel de encapsulamiento y la distribución.

Como es natural, para que esto sea posible, la clase destinataria debe tener implementado previamente un método por el cual pueda interpretar los mensajes de forma normalizada, así como las funciones necesarias para llevar a cabo el cálculo del área.

[1]​ Otra de las aplicaciones donde este modelo supone una clara ventaja es en la programación concurrente y distribuida.

El protocolo más extendido para acceder a páginas web — HTTP — también funciona bajo este modelo: en su caso, un ordenador al que se conoce como "servidor" contiene un dato (por ejemplo, una página web), y varios ordenadores independientes (llamados "clientes") desean acceder a dicho dato.

Para comprender esto, primero es necesario resaltar que el envío y recepción de un mensaje constituyen dos pasos completamente diferentes: por un lado, el proceso emisor ejecuta la función que envía el mensaje al proceso destinatario, y este ejecutará por su parte otra función que le permitirá recibirlo.

Ambos procesos permanecerán bloqueados hasta que la transmisión del mensaje haya finalizado correctamente.

Por otro lado, una mala programación podría llevar a que un proceso ejecutara una función de envío que no tiene su correspondiente función de recibir o viceversa, con lo cual los procesos podrían llegar a quedar bloqueados indefinidamente esperando el uno al otro (interbloqueo).

En su caso, el proceso emisor ejecutará la orden de envío inseguro (i_send()), se dará la orden de envío e instantáneamente se devolverá el control al programa principal, sin esperar a que los bytes hayan terminado de ser leídos del emisor ni escritos en el receptor.

Por su parte, el receptor ejecutará la orden de recepción insegura (i_send), por lo que se dará la orden de recepción y a continuación se devolverá el control al programa, sin esperar a que se complete el envío ni a que terminen de llegar los datos.

Concretamente, se dispone de funciones de sondeo bloqueante (wait_send() y wait_recv()), las cuales bloquean al emisor y receptor respectivamente si el envío o recepción del mensaje no ha finalizado aún.