Semana 11 servidrores concurrentes ok

Post on 16-Apr-2017

159 views 2 download

Transcript of Semana 11 servidrores concurrentes ok

Servidores Concurrentes

Redes de computadoras

Qué pasa cuando varios clientes tratan de conectarse al mismo tiempo a un servidor????

• Una forma es ir atendiéndolos de a uno en un ciclo: como en el programa que atiende pedidos de archivos– Se acepta una conexión– Se lee la petición– Se lee desde el archivo y se escribe en el socket hasta encontrar

una marca de fin de archivo• A este tipo de servidores se les llama servidores iterativos• El problema es que todo cliente tiene que esperar su turno para

ser atendido• Si uno de ellos pide un archivo muy grande los demás tienen

que esperar• La mayor parte de la espera es debido a operaciones de IO, hay

capacidad de CPU ociosa !

Introducción a la Concurrencia• ¿Qué es la concurrencia?

– Programa Secuencial. Proceso– Procesos Concurrentes. Programa y sistema concurrente– Relaciones entre procesos: Competencia y Cooperación– Actividades entre procesos: Sincronización y Comunicación

• ¿Dónde se usa la concurrencia?• ¿Cómo se usa la concurrencia?

¿Qué es la concurrencia?

• El paradigma de la programación concurrente

• Paradigma– Conjunto de teorías, estándares y métodos que

juntos representan una forma de ver el mundo• Concurrencia

– Acaecimiento de varios sucesos al mismo tiempo

¿Qué es la concurrencia?Paralelismo Solapamiento

Simultaneidad

Tiempo

TiempoTiempo

• Los sucesos se producen en un mismo

intervalo de tiempo intervalo de tiempo ((diferentes recursos)

• Los sucesos se producen en el mismo

instante de tiempoinstante de tiempo

• Los sucesos se producen en intervalos de intervalos de

tiempo superpuestostiempo superpuestos

Un servidor secuencial (iterativo) atendiendo a más de un cliente

A SERVERA CLIENT

A CLIENT

A CLIENT

4444

Durante la conversación no puede oír por el puerto 4444

A SERVERA CLIENT

A CLIENT

A CLIENT

4444

Sólo después de efectuar la transmisión se pone a escuchar de nuevo por el 4444

A SERVERA CLIENT

A CLIENT

A CLIENT

4444

Si el servicio consiste en transferir un archivo, el cliente debe digitar el nombre

A SERVERA CLIENT

A CLIENT

A CLIENT

4444

¿Qué sucede si el servidor tiene que esperar mucho para que un cliente escriba el nombre de un archivo?

A SERVERA CLIENT

A CLIENT

A CLIENT

4444Timeout

ArchServidor2

Un Servidor Concurrente • Un servidor concurrente atiende a varios clientes al

mismo tiempo.• Más aún, mientras está atendiendo sigue escuchando • El problema es que todo cliente tiene que esperar su

turno para ser atendido.• Si uno de ellos pide un archivo muy grande los

demás tienen que esperar• La mayor parte de la espera es debido a operaciones

de IO, hay capacidad de CPU ociosa!• Se trata de crear un nuevo proceso o línea de

ejecución cada vez que un cliente “llega” a pedir un servicio.

Servidores Comcurrentes: hay procesos separados para atender el puerto y para transferir el archivo

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Después que el cliente contacta al servidor, éste crea otro proceso para para atender al cliente y se queda

escuchando el puerto 4444 por otro

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Mientras el nuevo proceso está atendiendo al primer cliente, el segundo cliente puede contactar al

servidor en el puerto 4444

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Y el servidor crea otro proceso

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Ahora un tercer cliente contacta al servidor

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Y un tercer proceso esclavo o thread es creado

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

18

Tipos de Servidores según su forma de servicio

• Los servidores pueden clasificarse como servidores concurrentes o servidores iterativos.

• Los servidores iterativos reciben y atiende de a un requerimiento a la vez. Poseen un solo hilo de control (un “program counter”)

• Los servidores concurrentes pueden atender a mútiples clientes en forma concurrente. – Éstos poseen un hilo que espera por conexiones y crea un hilo ante

la llegada de un nuevo cliente.– Éste hilo se hace cargo de los requerimiento del cliente y luego

termina (“exit”) cuando el cliente se va. – Éstos requieren capacidad de ejecución de tareas concurrentes.

Cómo (y por qué) crear procesos paralelos • Si existe sólo una CPU, ¿Por qué crear procesos paralelos?

– Porque algunos programas se escriben más fácilmente así. De hecho, la programación de un servidor es a veces más fácil si se hace de esta manera.

– Porque sí hay más de un procesador !!!!! (¿dónde?)• El concepto de procesos paralelos implentados a nivel de S.O.

aparecen con UNIX y C. • La forma de crearlos es ejecutando una función llamada fork()• int i = fork() provoca que se cree un proceso exactamente igual al que

se está ejecutando. • La única diferencia es que en el proceso hijo (el nuevo creado) la

variable i vale cero. Esto se usa para saber quién soy yo. • En programación de servidores concurrentes, si soy el hijo ejecuto la

parte que corresponde al proceso esclavo. • Si soy el padre (i tiene un valor distinto de cero y es el id del proceso

hijo creado) sigo recibiendo peticiones