Beruflich Dokumente
Kultur Dokumente
1. Programacin multihilo
Normalmente los programas tienen un comportamiento secuencial y un nico camino de ejecucin, tienen:
Un punto de inicio Una secuencia de ejecucin Un final
Cuando en un programa se quiere realizar ms de una tarea simultneamente se utilizan tcnicas de ejecucin que permiten que diversos puntos del programa se estn ejecutando a la vez.
Programa multihilo: contiene dos o mas partes que pueden ejecutarse de forma simultnea.
permite realizar muchas actividades simultneas en un programa.
1. Procesos e Hilos
Proceso
Programa en ejecucin Recursos propios que se crean durante la vida de un proceso y se destruyen cuando finaliza:
Espacio propio de direcciones Memoria Variables Ficheros Registros, seales, etc.
En SO, un proceso es la unidad mnima de cdigo que puede seleccionar el planificador, cuando hablamos de un sistema multitarea. La multitarea basada en procesos no est bajo control de Java
1. Procesos e Hilos
Hilo
Unidades concurrentes dentro de un programa. Un nico programa puede realizar dos o ms tareas de forma simultnea (hilos). Son tareas ligeras: bajo coste en consumo de recursos, que permiten el uso ptimo de la CPU Comparten recursos con otros hilos y con el proceso:
Mismo espacio de direcciones Mismo espacio de memoria Mismas variables globales Mismo conjunto de ficheros abiertos Seales, etc.
Al compartir recursos, los threads se crean ms rpido que los procesos y los cambios de contexto entre threads son menos costosos Java controla la multitarea.
4
1. Procesos e Hilos
Un programa que ejecuta paralelamente distintos hilos, se divide en algn momento en varios procesos (threads) que se ejecutan simultneamente Para qu?
Programas que tengan que realizar varias tareas de forma simultnea. Servidores concurrentes
2. Creacin de un hilo
2. Creacin de un hilo
Un hilo de ejecucin es un objeto de la clase java.lang.Thread Como cualquier otro objeto, se puede almacenar en una variable, tiene constructor, mtodos, etc... El cdigo que se ejecutar en el nuevo hilo de ejecucin se indica en el constructor con un objeto de una clase que implemente el interfaz java.lang.Runnable Cuando se ejecuta el mtodo start() en el Thread se crea un hilo y se ejecuta el cdigo del mtodo run() del Runnable
2. Creacin de un hilo
public class Programa Gestin de hilos public static void args) { Thread thread = new Thread(new Hilo()); thread.start(); } { en Java main(String[]
public class Hilo implements Runnable { @Override public void run() { System.out.println("Soy un hilo"); } }
2. Creacin de un hilo
public class Programa Gestin de hilos public static void args) { Thread thread = new Thread(new Hilo()); thread.start(); } Comienza la ejecucin del hilo { en Java main(String[]
El cdigo del hilo se codifica en una clase que implementa el interfaz Runnable public class Hilo implements Runnable { @Override public void run() { System.out.println("Soy un hilo"); } El mtodo run() se ejecutar cuando } comience la ejecucin del hilo
public class Programa { public static void main(String[] args) { Thread t1 = new Thread(new Hilo(1), "Hilo1"); t1.start(); Thread t2 = new Thread(new Hilo(2), "Hilo2"); t2.start(); } } public class Hilo implements Runnable {
public class Programa { public static void main(String[] args) { Thread t1 = new Thread(new Hilo(1), "Hilo1"); t1.start(); Thread t2 = new Thread(new Hilo(2), "Hilo2"); t2.start(); } } public class Hilo implements Runnable {
4. Documentacin
SIN HILOS
Solicitar Cliente Servidor
Problemas de latencia
Si el servidor est ocupado procesando una solicitud no puede procesar otras Reduccin de disponibilidad global del servicio
14
Procesar
Auxiliar
El Hilo auxiliar procesa la peticin del cliente, y el programa servidor no se queda bloqueado en esa tarea, puede seguir atendiendo Elimina tiempos de espera a los usuarios. Elimina cuellos de botella Aunque el procesamiento tenga un coste temporal elevado, el servidor puede seguir admitiendo nuevas solicitudes
15
Auxiliar 2
Cliente 3 Cliente 4
Auxiliar 3
Auxiliar 4
Un hilo por cada sesin que dependa de una conexin diferente Mejora la disponibilidad
16
int port = ... ServerSocket serverSocket = new ServerSocket(port); while (true) { Socket socket = serverSocket.accept(); Thread t = new Thread(new Conexion(socket)); t.start(); }
Recibir
Hilo 2
Lograr que un mismo programa haga varias tareas diferentes Ejemplo: cliente pueda leer y escribir a la vez
19