3.- Programación multihilo Flashcards
3.1.- Programación de hilos. Librerías y clases
Clase Thread. Funciones
- void start ()
- void run ()
- static Thread currentThread ()
- long getId ()
- static void sleep (long milis)
- void interrupt ()
3.1.- Programación de hilos. Librerías y clases
Clase Thread. Funcion void start ()
Inicializa el hilo.
3.1.- Programación de hilos. Librerías y clases
Clase Thread. Funcion void run ()
Comienza la ejecución del hilo.
3.1.- Programación de hilos. Librerías y clases
Clase Thread. Funcion static Thread currentThread ()
Devuelve la referencia del hilo que se encuentra en ejecución.
3.1.- Programación de hilos. Librerías y clases
Clase Thread. Funcion long getId ()
Devuelve el identificador del hilo.
3.1.- Programación de hilos. Librerías y clases
Clase Thread. Funcion static void sleep (long milis)
El hilo se detiene durante el número de milisegundos especificado.
3.1.- Programación de hilos. Librerías y clases
Clase Thread. Funcion void interrupt ()
Interrumpe la ejecución del hilo.
3.2.- Gestión de hilos
Proceso. Definición
Un proceso es cualquier programa en ejecución y es totalmente independiente de otros procesos.
3.2.- Gestión de hilos
Procesos. Relación con hilos
Un proceso puede tener varios hilos de ejecución que realizarán subtareas del proceso principal que los ha creado.
3.2.- Gestión de hilos
Hilo. Definición
Un hilo es un conjunto de tareas que se ejecutan por el sistema operativo. También se denominan hebras o subprocesos.
3.2.- Gestión de hilos
Hilos. Información propia
Los hilos contienen información propia, como, por ejemplo, su identificador y toda aquella información que sea necesaria para que la aplicación pueda comunicarse con el sistema, es decir, el contador del programa, la pila de ejecución y el estado de la CPU.
3.2.- Gestión de hilos
Hilos. Recursos compartidos
Mientras que los procesos se caracterizan por no compartir la memoria con la que trabajan y ser independientes entre ellos, lo hilos no son iguales. Estos últimos suelen compartir la memoria con la que trabajan, puesto que pertenecen al mismo proceso.
3.2.- Gestión de hilos
Hilos. Recursos compartidos. Navegador web
Un ejemplo que puede ayudar a entender este concepto es un navegador web. El navegador web es un proceso con un identificador. Dentro de ese navegador es posible crear diferentes pestañas que comparten la memoria.
3.2.- Gestión de hilos
Hilos. Recursos compartidos. Valores modificados
Cuando un hilo modifica un dato en la memoria, el resto de hilos del proceso pueden obtener este valor modificado.
3.2.- Gestión de hilos
Hilos. Ventajas
El uso de hilos en lugar de procesos tiene bastantes ventajas, entre las que se destacan dos
El uso de hilos en lugar de procesos tiene bastantes ventajas, entre las que se destacan dos:
* La creación de un hilo tiene un coste menor que la creación de un proceso, puesto que no es necesario reservar.
memoria para cada uno de ellos porque la comparten.
* Es más rápido cambiar de un hilo a otro que de un proceso a otro.
3.2.- Gestión de hilos
Hilos. Tareas
Estos hilos suelen ser utilizados la mayor parte de las ocasiones para llevar a cabo tareas en segundo plano, puesto que se reduce mucho el tiempo de realización de diversas tareas de forma simultánea.
3.2.- Gestión de hilos
Hilos. Java
Java es uno de los lenguajes de programación que permite trabajar con distintos hilos en el desarrollo de una aplicación.
3.3.- Progrmación multihilo
Programacion multihilo. Tiempo de ejecución
A la hora de desarrollar un software es necesario tener en cuenta qué tiempo de ejecución debe de tener como máximo una aplicación
3.3.- Progrmación multihilo
Programacion multihilo. Consumo de recursos
Es importante medir el consumo de recursos que esta ha utilizado. Cuando existe solo un proceso, existe la posibilidad de que el consumo de memoria RAM y recursos del procesador por parte del proceso en ejecución, sobrecargue el sistema.
3.3.- Progrmación multihilo
Programacion multihilo. Hilos de ejecución
Como solución a esto se han creado los hilos de ejecución que permiten ser ejecutados dentro de una aplicación de forma paralela y haciendo uso de otra parte del código. Hoy en día la programación de aplicaciones con estas características es fundamental.
3.3.- Progrmación multihilo
Programacion multihilo. Optimización del rendimiento
De esta forma, es posible ejecutar un hilo en primer
plano que permita la comunicación con el usuario, y, en
segundo plano, hilos que vayan ejecutando las diferentes tareas de carga de una aplicación. Con esto se consigue que el rendimiento del equipo esté más optimizado. Además, permiten al usuario trabajar con diferentes aplicaciones al mismo tiempo sin penalizar el rendimiento del equipo. Esto posibilita una gran cantidad de opciones como, por ejemplo, el trabajo en múltiples escritorios con diversas aplicaciones de forma paralela.
3.4.- Estados de un hilo
Hilos. Ciclo de vida
Al igual que los procesos, los hilos tienen un ciclo de vida en el que van pasando por diferentes estados.
3.4.- Estados de un hilo
Hilos. Estados
Los estados que pueden tener un hilo son
Los estados que pueden tener un hilo son:
* Listo
* Ejecución
* Bloqueado
* Muerto
3.4.- Estados de un hilo
Hilos. Estados. Listo
Se ha creado el hilo, pero aún no ha comenzado su ejecución.
3.4.- Estados de un hilo
Hilos. Estados. Ejecución
Cuando un objeto llama al método start() comienza la ejecución del hilo, es decir, se empiezan a ejecutar las instrucciones que se encuentran en el método run().
3.4.- Estados de un hilo
Hilos. Estados. Bloqueado
El hilo se ha parado pero puede volver a ejecutarse.
3.4.- Estados de un hilo
Hilos. Estados. Bloqueado. Acciones
Normalmente, el hilo se bloquea por alguna de
las siguientes acciones:
* Se invoca al método sleep().
* El hilo queda a la espera de que finalice una operación de entrada/salida.
* Se invoca el método wait(). Cuando un hilo queda bloqueado por este método, otro hilo debe invocar el método notify() o notifyAll(), dependiendo de si quiere despertar un único hilo, o todos aquellos que estén bloqueados, respectivamente.
* Otro hilo, externamente, invoca al método suspend(). Cuando un hilo llama al método suspend(), el hilo bloqueado debe recibir el mensaje resume() para poder volver a la ejecución.
3.4.- Estados de un hilo
Hilos. Estados. Muerto
Ell hilo muere, ya sea porque ha finalizado el método run() o porque externamente han decidido pararlo.
3.4.- Estados de un hilo
Hilos. Cambios de estado
Los cambios de estado de un hilo vienen dados por las
siguientes situaciones:
Los cambios de estado de un hilo vienen dados por las
siguientes situaciones:
* Creación
* Bloqueo
* Desbloqueo
* Terminación
3.4.- Estados de un hilo
Hilos. Cambios de estado. Creación
Cuando se crea un proceso se crea un hilo para ese proceso. Después, este hilo puede crear otros hilos dentro del mismo proceso. El hilo pasará a la cola de los Listos.
3.4.- Estados de un hilo
Hilos. Cambios de estado. Bloqueo
Cuando un hilo necesita esperar por un suceso, se bloquea (guardando sus registros de usuario, contador de programa y punteros de pila). Ahora el procesador podrá pasar a ejecutar otro hilo que esté al principio de la cola de Listos, mientras el anterior permanece bloqueado.
3.4.- Estados de un hilo
Hilos. Cambios de estado. Desbloqueo
Cuando el evento por el que el hilo permanecía en estado de bloqueo finaliza, el hilo pasa a la cola de los Listos.
3.4.- Estados de un hilo
Hilos. Cambios de estado. Terminación
Cuando un hilo finaliza, se liberan todos los recursos utilizados por él.
3.5.- Recursos compartidos entre hilos
Hilos. Espacio de memoría
Si distintos hilos comparten el mismo espacio de memoria pueden aparecer algunos problemas, denominados problemas de sincronización
3.5.- Recursos compartidos entre hilos
Hilos. Problemas de sincronización
Si distintos hilos comparten el mismo espacio de memoria
pueden aparecer algunos problemas, denominados problemas de sincronización. Estos son los siguientes
Estos son los siguientes:
* Condición de carrera
* Inconsistencia de memoría
* Inanición
* Interbloqueo
3.5.- Recursos compartidos entre hilos
Hilos. Problemas de sincronización. Condición de carrera
Es la ejecución de un programa en la que su salida depende de la secuencia de eventos que ocurran.
3.5.- Recursos compartidos entre hilos
Hilos. Problemas de sincronización. Inconsistencia de memoria
Se produce cuando los hilos, que comparten un dato en memoria, ven varios valores para el mismo elemento.
3.5.- Recursos compartidos entre hilos
Hilos. Problemas de sincronización. Inanición
Es un problema grave, y se trata de la denegación del acceso a un recurso compartido al mismo hilo. De este modo, queda bloqueado a su espera.
3.5.- Recursos compartidos entre hilos
Hilos. Problemas de sincronización. Interbloqueo
Es un problema grave, y ocurre cuando un hilo está esperando por un recurso compartido, el cual está asociado a un hilo que tiene el estado de bloqueado.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización
Para poder evitarlos en gran medida, es necesario implementar mecanismos de sincronización entre los hilos de un proceso.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización. Zona de exclusión mutua
Se consigue que un hilo que quiere acceder al mismo recurso que otro, se quede en espera hasta que se liberan dichos recursos. Este tipo de mecanismos se denominan zona de exclusión mutua.
3.5.- Recursos compartidos entre hilos
Hilos. Esperar y continuar
Estos hilos deben saber quiénes de ellos deben esperar y cuáles continuar con su ejecución. Para ello existen diferentes mecanismos de comunicación entre hilos.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización
Estos hilos deben saber quiénes de ellos deben esperar y cuáles continuar con su ejecución. Para ello existen diferentes mecanismos de comunicación entre hilos.
Para ello existen diferentes mecanismos de comunicación entre hilos:
* Operaciones atómicas
* Secciones críticas
* Semáforos
* Tuberías
* Monitores
* Paso de mensajes
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización. Operaciones atómicas
Se realizan a la vez, por lo que forman un pack. Así se evita que los datos compartidos tengan distintos valores para el resto de hilos del proceso.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización. Secciones críticas
Permiten estructurar el código de la aplicación, de modo que se accede a los datos compartidos de forma ordenada.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización. Semáforos
Es un mecanismo que toma los valores 0 o 1. El hilo que accede al recurso inicia el semáforo a 1 y, cuando finaliza, el valor se queda a 0.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización. Tuberías
Los hilos se añaden a una cola que da prioridad a través de un algoritmo FIFO. Por tanto, el primero que
solicite el acceso será asignado al recurso.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización. Monitores
Aseguran que solo un hilo tendrá acceso al recurso con el estado de ‘ejecución’, gracias al envío de señales. El proceso que accede recibe el uso del candado y, tras su finalización, lo devuelve al monitor.
3.5.- Recursos compartidos entre hilos
Hilos. Mecanismos de sincronización. Paso de mensajes
Los hilos deben contener los métodos para entender los mensajes. En consecuencia, el coste es mayor. Sin embargo, si hay seguridad en el envío y recepción de un mensaje, existe la garantía de que solo un proceso accederá a un recurso determinado en el mismo momento.
3.6.- Programas multihilo y sincronización
Hilos. Programas multihilos
Cuando en un programa tenemos varios hilos ejecutándose a la vez es posible que varios hilos intenten acceder a la vez al mismo sitio (fichero, conexión, array de datos…) y es posible que la acción de uno de ellos entorpezca la del otro.
3.6.- Programas multihilo y sincronización
Hilos. Problemas de sincronización
Para solucionar estos problemas, hay que sincronizar los hilos. Por ejemplo si Hilo A escribe en fichero “Hola” y el Hilo B escribe “Adiós” , al final quedarán las letras entremezcladas. La finalidad es que el Hilo A escriba primero “Hola” y luego el Hilo B escriba “Adiós”. Así que cuando un hilo escriba en el fichero, debe marcar de alguna manera que el fichero está ocupado y el otro hilo deberá esperar que esté libre.
3.6.- Programas multihilo y sincronización
Hilos. Sincronización en Java
La forma de comunicarse consiste en compartir un objeto. Imaginemos que escribimos en un fichero usando una variable fichero de tipo PrintWriter. Para escribir el Hilo A hará esto:
- fichero.println(“Hola”);
Mientras el Hilo B hará esto:
- fichero.println(“Adiós”);
Si los dos hilos lo hacen a la vez, sin ningún tipo de sincronización, el fichero final puede tener esto:
- HoAldiaós
Para evitar este problema debemos sincronizar los hilos. En Java el código sería así:
- synchronized (fichero) { fichero.println(“Hola”); }
Y el otro hilo:
- synchronized (fichero) { fichero.println(“Adiós”); }
3.6.- Programas multihilo y sincronización
Hilos. Método synchronized(fichero)
Al poner synchronized(fichero) marcamos fichero como
ocupado desde que se abren las llaves hasta que se cierran. Cuando el Hilo B intenta también su synchronized(fichero), se queda ahí bloqueado, en espera de que el Hilo A termine con fichero.
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Sistema operativo. Formas de implementar
Los sistemas operativos tienen dos formas de implementar hilos:
Los sistemas operativos tienen dos formas de implementar hilos:
* Multihilo apropiativo
* Multihilo cooperativo
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Sistema operativo. Formas de implementar. Multihilo apropiativo
Permite al sistema operativo determinar cuándo debe haber un cambio de contexto. Pero esto tiene una desventaja, y es que el sistema puede hacer un cambio de contexto en un momento inoportuno, causando una confusión de prioridades, creando una serie de problemas.
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Sistema operativo. Formas de implementar. Multihilo cooperativo
Depende del mismo hilo abandonar el control el control cuando llega a un punto de detección, lo cual puede traer problemas cuando el hilo espera la disponibilidad de un recurso.
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Gestión de prioridades en Java
En cuanto a la gestión de las prioridades, en el lenguaje
Java, cada tiene una preferencia. Predeterminadamente, un hilo hereda la prioridad del hilo padre que lo crea, aunque puede aumentar o disminuir mediante el método setPriority(). Para obtener la prioridad del hilo se utiliza el método getPriority().
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Método setPriority()
Aumentar o disminuir la prioridad del hilo.
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Método getPriority()
Obtener la prioridad del hilo.
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Valores de prioridad en Java
La prioridad se mide mediante un rango de valores enteros entre 1 y 10, siendo 1 la mínima prioridad (MIN_PRIORITY) y 10 el valor de máxima (MAX_PRIORITY). Si varios hilos tienen la misma prioridad, la máquina virtual va cediendo control de forma cíclica.
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Propidad MIN_PRIORITY
1 la mínima prioridad (MIN_PRIORITY)
3.6.- Sistema operativos y los hilos. Planificación y acceso
Hilos. Propidad MAX_PRIORITY
10 la mínima prioridad (MAX_PRIORITY)
3.7.- Depuración y documentación de aplicaciones
Desarrollo. Depuración
Durante todo el proceso de desarrollo de una aplicación es necesario hacer depuraciones constantes y comprobaciones del comportamiento y resultados obtenidos. Con esto se consiguen focalizar los errores y
poder resolver las incidencias más rápidamente.
3.7.- Depuración y documentación de aplicaciones
Desarrollo. Depuración. Puntos de interrupción
La mejor forma de realizarlas es a través del uso de puntos de interrupción. Estos puntos indican al depurador del software que ejecuta la aplicación qué debe parar o pausar su ejecución en un punto determinado.
3.7.- Depuración y documentación de aplicaciones
Desarrollo. Depuración. Inspección de valores
Estos puntos suelen usarse para mostrar los valores obtenidos y mensajes necesarios para comprobar que los datos son los correctos y la ejecución hasta ese punto es correcta. Además, este tipo de puntos se utilizan como herramienta de trazabilidad de la aplicación.
3.7.- Depuración y documentación de aplicaciones
Desarrollo. Documentación
Toda la documentación debe detallar cuál es la funcionalidad de dicha aplicación. En ella deben de aparecer de forma esquemática todos los puntos relevantes, que son necesarios para comprender y conocer el correcto funcionamiento de la misma.