Semana 11 servidrores concurrentes ok

19
Servidores Concurrentes Redes de computadoras

Transcript of Semana 11 servidrores concurrentes ok

Page 1: Semana 11 servidrores concurrentes ok

Servidores Concurrentes

Redes de computadoras

Page 2: Semana 11 servidrores concurrentes ok

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 !

Page 3: Semana 11 servidrores concurrentes ok

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?

Page 4: Semana 11 servidrores concurrentes ok

¿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

Page 5: Semana 11 servidrores concurrentes ok

¿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

Page 6: Semana 11 servidrores concurrentes ok

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

A SERVERA CLIENT

A CLIENT

A CLIENT

4444

Page 7: Semana 11 servidrores concurrentes ok

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

A SERVERA CLIENT

A CLIENT

A CLIENT

4444

Page 8: Semana 11 servidrores concurrentes ok

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

Page 9: Semana 11 servidrores concurrentes ok

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

A SERVERA CLIENT

A CLIENT

A CLIENT

4444

Page 10: Semana 11 servidrores concurrentes ok

¿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

Page 11: Semana 11 servidrores concurrentes ok

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.

Page 12: Semana 11 servidrores concurrentes ok

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

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Page 13: Semana 11 servidrores concurrentes ok

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

Page 14: Semana 11 servidrores concurrentes ok

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

Page 15: Semana 11 servidrores concurrentes ok

Y el servidor crea otro proceso

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Page 16: Semana 11 servidrores concurrentes ok

Ahora un tercer cliente contacta al servidor

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Page 17: Semana 11 servidrores concurrentes ok

Y un tercer proceso esclavo o thread es creado

A SERVER

A CLIENT

A CLIENT

A CLIENT

4444

Page 18: Semana 11 servidrores concurrentes ok

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.

Page 19: Semana 11 servidrores concurrentes ok

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