Leccion - 6 - Comunicacion y Sincronizacion de Mensajes

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Capítulo 6 – Comunicación

y
Sincronización basada en mensajes

6.2 Modelos de sincronización de procesos

- Comunicación asíncrona: El emisor del mensaje continúa su labor nada más


realizar el envío, sin reparar en si dicho mensaje ha sido recibido o no. Un ejemplo
sería cuando alguien envía un SMS a otra persona.
Este tipo de comunicación sirve para informar de sucesos que ya han tenido lugar y
nunca dicen nada sobre la situación o el estado presente del emisor.

- Comunicación síncrona: El proceso emisor sólo continúa su actividad cuando


tiene confirmación de que el mensaje emitido ha sido recibido. Un ejemplo sería una
llamada telefónica.
El emisor permanece a la espera hasta que el receptor recibe la respuesta, pausando
su actividad actual hasta que la comunicación se establece.

- Comunicación por invocación remota: El emisor del mensaje continúa sólo


cuando recibe una respuesta o su petición por parte del receptor. Tomando el símil
anterior, este tipo de comunicación se da cuando el emisor y el receptor intercambian
información de manera remota.

Una vez entendido esto, es fácil entender que se puede construir una relación de
comunicación síncrona mediante el uso de dos eventos asíncronos. Para ello, el emisor
enviaría un mensaje asíncrono con la diferencia de que inmediatamente quedaría a la espera
de respuesta. Por su parte, el proceso receptor quedaría a la espera de recibir el mensaje del
emisor y, una vez recibido, debería mandar el mensaje asíncrono de confirmación.
Sin embargo, todo esto presenta alguna inconvenientes importantes.

1. El principal inconveniente es que se podrían llegar a necesitar infinitos búferes


para almacenar los mensajes que el proceso receptor no hubiese leído todavía.

2. La mayoría de las comunicaciones se realizaría de manera síncrona, lo cual


implicaría un esfuerzo de implementación mayor si se partiese siempre de mensajes
asíncronos.

3. Construir una comunicación síncrona a partir de un modelo asíncrono requiere de


más comunicaciones, por lo que los programas así construidos son más complejos.

4. Cabe destacar que probar si el programa completo funciona correctamente sería


más difícil.
6.3 Nombrado de los socios de comunicación y estructura de los mensajes

Podemos distinguir dos características en un esquema de nombrado de socios de


comunicación:

- Directo: El emisor llama directamente al receptor.


- Indirecto: El emisor llama a un intermediario que es el que finalmente se comunica
con el receptor.

- Simétrico: Cuando el emisor y el receptor se pueden nombrar entre sí, directa o


indirectamente.
- Asimétrico: Cuando el receptor no nombra un emisor específico, pero acepta
mensajes de cualquier fuente.

Tanto para enviar como para recibir un mensajes, normalmente es necesario


especificar a dónde enviarlo o desde donde enviarlo. Así pues, los socios de comunicación
implicados necesitan nombres para llamarse los unos a los otros. Dichos nombres pueden
referirse a:

1. Un hilo o proceso directamente: Es propia de los paquetes de programación


concurrente y utiliza un id asociado unívocamente a cada proceso. De esta manera,
cada orden de enviar o recibir incorpora dicho parámetro para identificar el socio de
comunicación adecuado.
Se trata de un parámetro directo y puede ser tanto simétrico como asimétrico.

2. Una entrada o puerto de un módulo o proceso: Los emisores deben incluir el


nombre del puerto de entrada al receptor, que habitualmente es un módulo o proceso
con uno o varios hilos.
Cada entrada pertenece exactamente a una tarea y todos los mensajes enviados a la
misma entrada deber ser recibidos por esa única tarea.
Este es un método de tipo directo y asimétrico.

3. Algún tipo de toma o abstracción de canal: El proceso consiste en que el emisor


y el receptor declaren un canal con un nombre dado, y luego utilizar dicho nombre
para realizar el intercambio de mensajes.
Este método es de tipo indirecto y asimétrico.

6.4 Espera selectiva

Como ya se vio, la espera activa es una solución a que el receptor permanezca a la


espera de ser llamado por cualquiera de varios emisores, si bien, está lejos de ser una
solución óptima, pues en estos casos el proceso debe comprobar continuamente el valor de
una variable, malgastando así sus ciclos de ejecución. Una mejor forma de abordar la
situación de las esperas en la coordinación de hilos con el fin de optimizar el
funcionamiento de los procesos receptores es que éstos esperen selectivamente un cierto
número (n > 1) de posibles mensajes entrantes al mismo tiempo.
Para entender qué es y cómo funciona la espera selectiva, es necesario conocer
primero las operaciones con guarda. Una operación se dice que es con guarda si se ejecuta
únicamente en el caso de que su guarda se evalúe a verdadero.
Una estructura de elección con operaciones de guarda puede construirse con tantos
números de componentes con guarda como se desee. En caso de que más de una guarda se
evalúe a verdadero, la elección será arbitraria y se deja a cargo del procesador. Si ninguna lo
hiciese se consideraría un error y la sentencia dentro del proceso que la ejecuta queda
abortada.

**Mirar ejemplos libro para mejor comprensión**

6.5 Sistemas Distribuidos

Es aquel sistema que consta de más de un elemento de procesamiento capaz de


operar de manera autónoma y que dichos elementos de procesamiento pueden cooperar con
el fin de llevar a cabo alguna tarea común.
Los dos protocolos de internet más utilizados en este tipo de sistemas es el TCP y
UDP.

- UDP: Los mensajes se envían a su destino de forma independiente y poco fiable. El


software de red intentará entregar el mensaje, pero no garantiza que dicha entrega se
produzca.
Además, dos mensajes enviados al mismo destino pueden llegar en diferente orden
independientemente del orden en que han sido enviados.
Los mensajes UDP usan nombres basados en puertos: cada mensaje es enviado a una
dirección IP específica y a un puerto concreto.

- TCP: También utiliza el nombrado basado en puertos, pero sólo para establecer las
conexiones. Una vez establecida, ésta permanece invariable para todas las
comunicaciones posteriores, siendo esta la situación del direccionado de mensajes a
canales. Bajo este protocolo, las conexiones entregar mensajes de manera fiable y en
orden.

Pasos a seguir para enviar o recibir mensajes haciendo uso de UDP:

1. Un hilo java debe crear un socket del tipo datagram.


2. El parámentro del constructor DatagramSocket es opcional. Si no se especifica en
la llamada al constructor, el S.O. de la máquina que realiza la conexión elegirá por si
mismo un puerto disponible.
3. Los parámetros que se pasa a DatagramPacket especifican, en el siguiente orden:
- Array de bytes
- Su tamaño
- La Dirección IP
Pasos a seguir para las comunicaciones sobre TCP:

1. Un servidor normalmente está a la escucha en un puerto por el cual se esperan las


conexiones de los clientes cuando éstos tratan de iniciar una comunicación.
2. La operación de aceptación del establecimiento queda bloqueada y a la espera
hasta que el servidor recibe una petición de un cliente que trata de conectarse al
puerto especificado.
3. Una vez creada la conexión, es frecuente que tanto el cliente como el sercidor
llamen a funciones de la clase Socket para crear flujos de datos de entrada y salida
(InputStream y OutputStream), que soportan todos los mecanismos estándar de Java
para entradas y salidas de texto.

También podría gustarte