Hilos y Concurrencia Con Java

download Hilos y Concurrencia Con Java

of 19

  • Upload

    -
  • Category

    Documents

  • view

    2.250
  • download

    1

Transcript of Hilos y Concurrencia Con Java

MonografaNombre: Alex Llanque Flores Codigo: 2008104006 Carrera Profesional: Ing. de Sistemas e Informtica Curso: Sistemas Distribuidos Ciclo: VII Docente: Ing. Edwing Maquera

Hilos y Concurrencia con JavaDefiniciones y Caso Practico Para el desarrollo del presente caso de estudio se ha utilizado el lenguaje Java, una muy poderosa herramienta para el desarrollo orientado a objetos y especialmente para la explotacin de la concurrencia a nivel deprograma, mediante la utilizacin de hilos de ejecucin o procesos ligeros

Introduccin

Para el desarrollo del presente caso de estudio se ha utilizado el lenguaje Java, una muy poderosa herramienta para el desarrollo orientado a objetos, la utilizacin a travs de Internet el desarrollo multiplataforma y especialmente para la explotacin de la concurrencia a nivel de programa, mediante la utilizacin de hilos de ejecucin o procesos ligeros. Los hilos o procesos ligeros son una parte de cdigo o mini programa que puede ser ejecutada independientemente, de forma que una aplicacin o un applet puede tener varios hilos ejecutndose simultneamente y efectuando distintas tareas; estos hilos se encuentran dentro de un programa y son parte de l. Los hilos, a veces tambin llamados contextos de ejecucin, pueden ser utilizados para la implementacin de algoritmos paralelos o procesos concurrentes, sin ser necesario disponer de equipos con estructura de multiprocesador. En el caso de un solo procesador, los procesos ligeros incorporan mecanismos para compartirlo, establecindose prioridades entre ellos y tambin facilidades de sincronizacin, cuando es necesario.

INDICE TEMATICO

1. 2. 3. 4. 5. 6. 7.

Definicin de Hilos. Definicin de Procesos Uso de Hilos Diferencias entre Hilos y Procesos. Definicin de Concurrencia Programa concurrente Programacin Concurrente 7.1 Procesos Concurrentes Ejecutados en Mltiples Computadoras 7.2 Procesos Concurrentes Ejecutados en un solo Computador 7.3 Programacin Concurrente dentro de un Proceso 8. Gestin de Hilos 9. Creacin , ejecucin y terminacin de hilos 10. Estados de los hilos 11. Paralelismo 12. Diseo con hilos 13. Comparando hilos de sistema vs hilos ce biblioteca 14. Java Por qu? 15. Formas de crear un hilo 16. Objetivo del Caso de Estudio 17. Descripcin del Problema Planteado 18. Descripcin de los Algoritmos Utilizados 19. Resultados y conclusiones

Definicin de Hilos. Flujo de ejecucin nico e independiente dentro de un proceso, son aplicaciones en java que nos permiten realizar subprocesos en forma paralela. Esa caracterstica nos permite entender como una aplicacin puede atender a varias aplicaciones, el cual es el principio bsico de los servidores web. Los hilos no pueden ejecutarse ellos solos; requieren la supervisin de un proceso padre para correr. Dentro de cada proceso hay varios hilos ejecutndose. Los hilos o procesos ligeros son una parte de cdigo o mini programa que puede ser ejecutada independientemente, de forma que una aplicacin puede tener varios hilos ejecutndose simultneamente y efectuando distintas tareas; estos hilos se encuentran dentro de un programa y son parte de l. Definicin de Procesos Es un conjunto conformado por una parte activa y un flujo de ejecucin. La parte activa es un conjunto de bienes y derechos asignados a un proceso. - Direccin memoria del proceso - ficheros abiertos Mientras el flujo de ejecucin es un conjunto ordenado de instrucciones maquinas del programa que va ejecutando el proceso. Secuencia = thread Hilos y procesos

Uso de Hilos Los hilos, a veces tambin llamados contextos de ejecucin, pueden ser utilizados para la implementacin de algoritmos paralelos o procesos concurrentes, sin ser necesario disponer de equipos con estructura de multiprocesador. En el caso de un solo procesador, los procesos ligeros incorporan mecanismos para compartirlo, establecindose prioridades entre ellos y tambin facilidades de sincronizacin, cuando es necesario. Ejemplo: Por ejemplo, Word puede tener un hilo en background chequeando automticamente la gramtica de lo que estoy escribiendo, mientras otro hilo puede estar salvando automticamente los cambios del documento en el que estoy trabajando. Como Word, cada aplicacin (proceso) puede correr varios hilos los cuales estn realizando diferentes tareas. Diferencias entre Hilos y Procesos. Un hilo, en efecto, es muy similar a un proceso pero con la diferencia de que un hilo siempre corre dentro del contexto de otro programa. Por el contrario, los procesos mantienen su propio espacio de direcciones y entorno de operaciones. Los hilos dependen de un programa padre en lo que se refiere a recursos de ejecucin. Un hilo comparte con sus hilos pares: o Seccin de cdigo

o Seccin de datos o Recursos del sistema operativo o Se les conoce como tarea

Definicin de Concurrencia Varios procesos al mismo tiempo. Se puede dar a niveles: Monoprocesador: intercalacin de procesos que dan la apariencia de simultnea. Multiprocesador: intercala procesos y adems los superpone.

Programa concurrente Un programa concurrente es un programa que tiene mas de una linea lgica de ejecucin, es decir, es un programa que parece que varias partes del mismo se ejecutan simultneamente. Un ejemplo de esto es un programa que realice determinada funcin y, simultneamente, exponga datos en la pantalla. Un programa concurrente puede correr en varios procesadores simultneamente o no. Esta importancia de la concurrencia es especialmente destacable en sistemas operativos como Linux, que adems de concurrentes, presentan unos mecanismos de concurrencia estables. Programacin Concurrente Consiste en la ejecucin simultanea de procesos, existen tres clases de computacin concurrente: 1. Procesos Concurrentes Ejecutados en Mltiples Computadoras. 2. Procesos Concurrentes Ejecutados en un solo Computador. 3. Programacin Concurrente dentro de un Proceso.

Procesos Concurrentes Ejecutados en Mltiples Computadoras Son procesos separados ejecutndose concurrentemente en computadores independientes interconectados a travs de una red. Cuando se accede a una pgina web utilizando un navegador. Un proceso de una mquina local interacta con un proceso de una maquina remota (servidor web).

Procesos Concurrentes Ejecutados en un solo Computador

Ciertos computadores que utilizan sistemas operativos multitarea, que permite la ejecucin concurrente de mltiples tareas o procesos. En computador con un solo CPU, se utiliza tiempo compartido, para ejecutar procesos por turnos. La verdadera concurrencia multitarea solo es posible si el computador tiene mltiples CPU, de forma que cada CPU pueda ejecutar un proceso

Programacin Concurrente dentro de un Proceso Un programa, podra necesitar realizar otras tareas mientras espera indefinidamente por la entrada de un usuario en una interfaz de una ventana. La programacin concurrente dentro de un proceso se lleva a cabo a travs de dos tipos de herramientas, proporcionadas por el sistema operativo: 1. Procesos Padres e Hijos 2. Threads o Hilos Procesos Padres e hijos: En tiempo de ejecucin, un proceso puede crear procesos hijos. A travs de la multitarea el proceso original, denominado proceso padre, contina ejecutndose simultneamente con el proceso hijo.

Procesos Threads o Hilos: El proceso crea hilos, tambin conocidos como procesos ligeros. Los hilos poseen una mnima informacin de estado, comportndose por lo dems de la misma forma que los procesos. Debido a que implican menos sobrecarga, es preferible utilizar hilos que utilizar procesos hijos.

Gestin de Hilos ULT: nivel de usuario o thread de biblioteca. La gestiona una biblioteca incluida en el proceso como una capa de software sobre la que se ejecuta los hilos. El SO desconoce de la existencia de estos threads para el se trata de un proceso normal, esta capa de software es la que crea, planifica y activa y termina los threads. ULK: nivel de kernell o ncleo.

El sistema operativo crea, planifica, activa y termina los hilos. Creacin, ejecucin y terminacin de hilos Desde el punto de vista de la programacin un hilo se define como la ejecucin de una funcin en paralelo con otras .El thread primario corresponde a la funcin main. El resto de los threads son creados por el SO o por una biblioteca, bajo peticin del proceso mediante el correspondiente servicio de creacin de threads. Es decir el main puede lanzar threads que a su vez pueden lanzar otros threads. La terminacin del thread se realiza cuando el thread ejecuta el retorno de la funcin asociada o cuando llama al servicio terminar thread. Cuando termina el ultimo thread del proceso termina el proceso. Adems cuando termina el thread primario termina el proceso aunque queden otros threads vivos.

Estados de los hilos Ejecucin: hace uso del procesador Listo: en cola listo para ser ejecutado Bloqueado: esperando algn evento para estar listo y ser ejecutado. La planificacin de los threads de sistema lo realiza el planificador del SO por lo que es externa al proceso, mientras que en los threads de biblioteca la realiza la capa de software de threads por los cuales interna al proceso.

Paralelismo Cuando un programa puede dividirse en procedimientos que pueden ejecutar de manera concurrente, el mecanismo de los threads permite

lanzar simultneamente la ejecucin de todos ellos. De esta manera se consigue que el proceso avance ms rpido.

Diseo con hilos Ofrece ventajas de divisin de trabajo que dan los procesos, pero con una mayor flexibilidad y ligereza lo que se traduce en mejores prestaciones ya que comparten memoria directamente. Permite separacin de tareas, en un hilo independiente. Facilita la modularidad Aumentan la velocidad de trabajo ya que aprovecha los tiempos de bloqueo de los threads para ejecutar otros. Comparten memoria mediante variable global. para el

As que hay que implementar mecanismos de sincronizacin acceso coordinado de datos

Comparando Thread de sistema con Thread de biblioteca 1.- Procesador: el tiempo de procesador consumido para gestionar hilos es menor en threads de biblioteca como 1 a 10.Debido a que los threads de ncleo no entran en el ncleo. 2.- Los thread de biblioteca se pueden utilizar en cualquier SO basta con disponer de la capa de software de threads .Los de sistema solo ejecutan en sistemas que lo soporten. 3.-Los threads de sistema permiten paralelismo. Los de biblioteca no.

Java Por qu? Para el desarrollo del presente caso de estudio se ha utilizado el lenguaje Java, una muy poderosa herramienta para el desarrollo orientado a objetos y especialmente para la explotacin de la concurrencia a nivel de programa, mediante la utilizacin de hilos de ejecucin o procesos ligeros Formas de crear un hilo Creacin de un hilo por herencia

Creacin de un hilo por Implementacin

Objetivo del Caso de Estudio Conforme a lo antes indicado, el objetivo del caso de estudio desarrollado fue el de programar una aplicacin con Java (Hilos.java) que implementara el problema de procesos productores y consumidores y posteriormente efectuar anlisis de la forma en que se ha desarrollado la ejecucin concurrente de los hilos y la sincronizacin de los mismos, que es el verdadero objetivo, ms

all de la utilizacin como ejemplo del problema de productores y consumidores.

Descripcin del Problema Planteado Una descripcin detallada del problema de los hilos de ejecucin puede consultarse en el Captulo Procesos y Procesadores en Sistemas Distribuidos, siendo especialmente pertinentes los temas relacionados con Introduccin a los Hilos, Uso de Hilos, Aspectos del Diseo de un Paquete de Hilos e Implantacin de un Paquete de Hilos.

Descripcin de los Algoritmos Utilizados Respecto del algoritmo de productores y consumidores utilizado como base para el Desarrollo del programa del caso de estudio. Los principales aspectos del algoritmo desarrollado son los siguientes: Los procesos productores simulan generar, es decir grabar informacin en un grupo de buffers disponibles. Los procesos consumidores simulan retirar, es decir leer informacin del grupo de buffers disponibles, que previamente debi ser cargado por los procesos productores. Los procesos consumidores solo pueden leer informacin previamente grabada por los procesos productores. Si cuando un proceso consumidor intenta leer no hay suficientes buffers disponibles, debe esperar a que alguno de los procesos productores grabe los buffers. Los procesos consumidores pueden retirar (leer) buffers en nmero variable

Programa:

// La interfaz Bufer especifica los mtodos llamados por el Productor y el Consumidor. public interface Bufer { public void establecer( int valor ); // colocar valor en Bufer public int obtener(); // devolver valor de Bufer }

// BuferNoSincronizado representa a un solo entero compartido. public class BuferNoSincronizado implements Bufer { private int bufer = -1; // compartido por los subprocesos productor y consumidor // colocar valor en bufer public void establecer( int valor ) { System.err.println( Thread.currentThread().getName() + " escribe " + valor ); bufer = valor; } // devolver valor de bufer public int obtener() { System.err.println( Thread.currentThread().getName() + " lee " + bufer ); return bufer; } } // fin de la clase BuferNoSincronizado // El mtodo run de Consumidor controla un subproceso que itera cuatro // veces y lee un valor de ubicacionCompartida cada vez. public class Consumidor extends Thread { private Bufer ubicacionCompartida; // referencia al objeto compartido // constructor public Consumidor( Bufer compartido )

{ super( "Consumidor" ); ubicacionCompartida = compartido; } // leer el valor de ubicacionCompartida cuatro veces y sumar los valores public void run() { int suma = 0; for ( int cuenta = 1; cuenta