La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.

Presentaciones similares


Presentación del tema: "Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores."— Transcripción de la presentación:

1 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 1 Ejemplo de Threads: escritura de la clase public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getName()); try { this.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println("DONE! " + getName()); }  El método this.sleep(milisegundos) debe ir en un bloque try and catch

2 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 2 Ejemplo de Threads: Uso de la clase nueva public class TwoThreadsTest { public static void main (String[] args) { SimpleThread t1,t2; t1 = SimpleThread("Jamaica"); t2 = SimpleThread("Fiji"); t1.start(); t2.start() }  El método start() inicia la ejecucón de un thread. Esto implica que se empieza a ejecutar el código escrito en el método run del thread. También existen otros métodos que se le pueden aplicar a un thread: suspend(), resume(), stop().

3 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 3 Problemas de sincronización con Threads  Los threads tienen la ventaja que pueden compartir memoria  Esto también es una desventaja cuando se requiere algún orden en la administración de los recursos  Pensemos en el problema de “repartir” (consumir) números.  Si el productor de números está en el servidor y hay varios threads clientes que piden números, debemos tener cuidado de no repartir el mismo número a clientes distintos  Veamos el problema de la sincronización en un ejemplo

4 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 4 Cómo usar threads para hacer servidores concurrentes  Hacer una clase Thread que tenga como variables de un objeto un socket y flujos de entrada y/o salida.  Programar el constructor de modo que reciba como parámetro un socket y haga todo lo necesario para dejar inicializado el ambiente para empezar a atender al cleinte (por ejemplo, abrir flujos de datos de entrada y/o salida del socket recibido)  Programar el método run de modo que implemente el protocolo necesario.  Programar un método main que en un ciclo infimito se ponga a escuchar en un port dado la llegada de clientes.  Con cada cliente nuevo crear un thread nuevo y pasar como parámetro el socket

5 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 5 Veamos un ejemplo:  Primero veremos un servidor iterativo que atiende a clientes en un ciclo  La atención consiste en enviar una serie de números que el cliente va leyendo e imprimiendo  Sin cambiar ni una línea de código en el cliente, reeplazaremos el servidor por uno concurrente.  Ejercicio: Copiar los archivos UnClienteQueEscribe.java y UnServidorQueOye.java y completar lo que falta  Ojo: no hay concurrencia, ES MUY SIMPLE  Ponerse a Escribir !!!! (los primeros 2 grupos que logren comunicación de ida y vuelta tienen 0.5+ en la prueba)

6 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 6 Cuando un programa debe comportarse como cliente y servidor a la vez: el teléfono  Un teléfono es un cliente y un servidor a la vez  Se comporta como servidor cuando recibe una llamada  Se comporta como cliente cuando efectúa una llamada  El servidor crea un socket asociado a un por desde donde escucha si hay alguien que quiere llamar.  El cliente queda esperando que el usuario de un comando para llamar a algun servidor (por ejemplo esperar del teclado que el usuario ingrese un nombre de host para llamar)  El problema es que deben estar los 2 en el mismo programa: usamos threads, uno para el servidor y otro para el cliente.  Ambos quedan esperando y se da curso a lo que pase primero.

7 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 7 Cuando un programa debe comportarse como cliente y servidor a la vez: el teléfono  Un teléfono es un cliente y un servidor a la vez  Se comporta como servidor cuando recibe una llamada  Se comporta como cliente cuando efectúa una llamada  El servidor crea un socket asociado a un por desde donde escucha si hay alguien que quiere llamar.  El cliente queda esperando que el usuario de un comando para llamar a algun servidor (por ejemplo esperar del teclado que el usuario ingrese un nombre de host para llamar)  El problema es que deben estar los 2 en el mismo programa: usamos threads, uno para el servidor y otro para el cliente.  Ambos quedan esperando y se da curso a lo que pase primero.

8 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 8 Cuando un programa debe comportarse como cliente y servidor a la vez: el teléfono (2)  Otro problema: no se deben aceptar peticiones de llamadas si es que se da curso a una llamada (se activa el thread del cleinte)  No se puede dar curso a una llamada si se atendó a una (se activa el thread de servidor)  La idea es suspender un thread cuando se activa el otro.  Para esto se necesita que ambos conozcan el otro thread. Al crear uno se le da un puntero al otro !  Ver programas telefono.java  El cliente sólo puede escribir, el servidor sólo puede leer, Modifíquelos !


Descargar ppt "Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores."

Presentaciones similares


Anuncios Google