La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

DESARROLLO DE SERVIDORES Iterativos Concurrentes.

Presentaciones similares


Presentación del tema: "DESARROLLO DE SERVIDORES Iterativos Concurrentes."— Transcripción de la presentación:

1

2 DESARROLLO DE SERVIDORES Iterativos Concurrentes

3 Servidores Iterativos socket(...) bind(...)listen(...)Accept(...)Transacción()

4 Servidores Concurrentes socket(...) bind(...)listen(...)Accept(...)fork() >0 Transaccion() =0

5 Costo de la concurrencia Sea S  tiempo de duracion de la transaccion n.S  tiempo para resolver n servicios que se puedan encolar en el backlog Sea C  tiempo para crear un proceso hijo o un thread Debe ser S >> C

6 Entrada/Salida asíncrona A veces es necesario que nuestro programa reciba información desde más de una fuente simultáneamente. No podemos bloquear un proceso a la espera de una conexión por un puerto determinado si tambien debemos esperar conexiones por otro puerto Tambien podriamos tener que esperar simultaneamente una conexión y un dato de un driver. Podemos utilizar un Accepr no bloqueante mediante la system call ioctl() Podemos utilizar una funcion para bloquar al proceso por un set definido de file descriptors y que se desbloquee ante actividad I/O de alguno de ellos indicandonos por cual existio actividad

7 Funcion Select retcod=select ( maxfd, lect_fd, esc_fd, exc_fd, tiempo ); Descriptor de mayor valor +1 Set de escritura Tiempo de bloqueo Set de lectura Set de excepción -1: error N de descriptores listos #include Tipo fd_set struct timeval { long tv_sec; /* segundos */ long tv_usec; /* microsegundos */ };

8 Tipo fd_set Son arrays de enteros en los que cada bit representa un file descriptor Cuando se desbloquea por uno de ellos el bit correspondiente cambia a 1 Por suerte existen macros para operar sobre estos bits. FD_ZERO( &fdset ); /* Inicializa todos los bits a cero */ FD_SET ( fd, &fdset ); /* Pone a 1 el bit indicado por fd */ FD_CLR ( fd, &fdset ); /* Pone a 0 el bit indicado por fd */ FD_ISSET( fd, &fdset ); /* Comprueba si el bit indicado por fd está a 1 */


Descargar ppt "DESARROLLO DE SERVIDORES Iterativos Concurrentes."

Presentaciones similares


Anuncios Google