Programacion Concurrente y Distribuida PDF

Document Details

PreferableGingko

Uploaded by PreferableGingko

Universidad Europea de Madrid

Tags

concurrent programming distributed systems computer science programming

Summary

La documentación se centra en la presentación de conceptos relacionados con la programación concurrente y distribuida. Desarrolla temas como procesos e hilos, con ejemplos de código Java y las ventajas y desventajas de los hilos.

Full Transcript

Programación Concurrente y Distribuida Tema 2. Procesos e hilos Computación en Sistemas Distribuidos Procesos e Hilos Computación en Sistemas Distribuidos Programación Concurrente y Distribuida ¡PREGUNTA! ¿Qué es un proceso? Programación Concurrente y Distri...

Programación Concurrente y Distribuida Tema 2. Procesos e hilos Computación en Sistemas Distribuidos Procesos e Hilos Computación en Sistemas Distribuidos Programación Concurrente y Distribuida ¡PREGUNTA! ¿Qué es un proceso? Programación Concurrente y Distribuida Procesos e Hilos Un proceso es la unidad básica de trabajo dentro de un sistema operativo, el cual, sistema operativo, se encarga de que se ejecuten (los procesos) y de proporcionar los recursos necesarios para ello. Programación Concurrente y Distribuida Procesos e Hilos Existen dos aspectos diferenciados dentro de los procesos: ejecución y posesión de recursos. Un proceso se puede observar como una o más unidades de ejecución, denominadas hilos, threads o hebras y un conjunto de recursos vinculados. También hilos o threads también se denominan procesos ligeros. Programación Concurrente y Distribuida Procesos e Hilos Programación Concurrente y Distribuida Procesos e Hilos Programa secuencial (*) https://jarroba.com/multitarea-e-hilos-en-java-con-ejemplos-thread-runnable/ Programación Concurrente y Distribuida Procesos e Hilos Programa multihilo o multitarea o multithread (*) https://jarroba.com/multitarea-e-hilos-en-java-con-ejemplos-thread-runnable/ Programación Concurrente y Distribuida Procesos e Hilos Programa multihilo o multitarea o multithread mkdir programacion_concurrente cd programacion_concurrente vi Cajera.java vi Cliente.java vi Main.java javac -d. *.java java threadsJarroba.Main La cajera Cajera 1 COMIENZA A PROCESAR LA COMPRA DEL CLIENTE Cliente 1 EN EL TIEMPO: 0seg Procesado el producto 1 ->Tiempo: 2seg Procesado el producto 2 ->Tiempo: 4seg Procesado el producto 3 ->Tiempo: 5seg Procesado el producto 4 ->Tiempo: 10seg Procesado el producto 5 ->Tiempo: 12seg Procesado el producto 6 ->Tiempo: 15seg La cajera Cajera 1 HA TERMINADO DE PROCESAR Cliente 1 EN EL TIEMPO: 15seg La cajera Cajera 2 COMIENZA A PROCESAR LA COMPRA DEL CLIENTE Cliente 2 EN EL TIEMPO: 15seg Procesado el producto 1 ->Tiempo: 16seg Procesado el producto 2 ->Tiempo: 19seg Procesado el producto 3 ->Tiempo: 24seg Procesado el producto 4 ->Tiempo: 25seg Procesado el producto 5 ->Tiempo: 26seg La cajera Cajera 2 HA TERMINADO DE PROCESAR Cliente 2 EN EL TIEMPO: 26seg Computación en Sistemas Distribuidos Ventajas e inconvenientes Programación Concurrente y Distribuida Procesos e Hilos Programa multihilo o multitarea o multithread Programación Concurrente y Distribuida Procesos e Hilos Programa multihilo o multitarea o multithread La creación de un hilo dentro de un proceso requiere menos tiempo que la creación del propio proceso, ya que su ámbito se encuentra dentro del propio proceso, además de compartir memoria y ficheros asignados al proceso, lo que hace más rápida la comunicación y sincronización. Pueden comunicarse entre sí sin invocar al núcleo (no hay necesidad de protección). La coordinación es más rápida (vs. procesos, que deben enviarse mensajes). Aumenta eficiencia. Programación Concurrente y Distribuida Procesos e Hilos Programa multihilo o multitarea o multithread Programación Concurrente y Distribuida Procesos e Hilos Programa multihilo o multitarea o multithread Computación en Sistemas Distribuidos Estados de un hilo Programación Concurrente y Distribuida Procesos e Hilos Los cambios de estado de los hilos son: creación, bloqueo, desbloqueo y terminación. Programación Concurrente y Distribuida Procesos e Hilos Cuando un proceso se suspende, todos sus hilos son suspendidos, ya que comparten el mismo espacio de direcciones. Cuando un proceso se termina, todos sus hilos terminan. Programación Concurrente y Distribuida Procesos e Hilos Creación Cuando se crea un proceso, se crea un hilo. Los hilos pueden crear otros hilos pasándole el puntero de instrucción y los argumentos. Los hilos poseen su propio contexto y espacio de pila. De esta manera, un nuevo hilo pasará a la cola de listos. Programación Concurrente y Distribuida Procesos e Hilos Bloqueo Cuando se bloquea un hilo: Cuando se produce el bloqueo, se guarda el contexto del hilo (contador de programa, registros, puntero de pila). En hilos a nivel de núcleo, bloquea solo el hilo. En hilos a nivel de usuario, bloquea el proceso entero. Programación Concurrente y Distribuida Procesos e Hilos Desbloqueo Cuando se desbloquea un hilo: En hilos a nivel de núcleo, el hilo pasa a la cola de listos. En hilos a nivel de usuario, siendo el único, el proceso pasa a la cola de listos. Programación Concurrente y Distribuida Procesos e Hilos Terminación Cuando se termina un hilo, se libera su bloque de control y su pila. Programación Concurrente y Distribuida Procesos e Hilos Computación en Sistemas Distribuidos Niveles de uso de los hilos Computación en Sistemas Distribuidos Hilos a nivel de usuario Programación Concurrente y Distribuida Procesos e Hilos Niveles de uso de los hilos Hilos a nivel de usuario La aplicación realiza todo el trabajo de la gestión de hilos, mientras que el núcleo no tiene noción de la existencia de hilos. La biblioteca de hilos es la zona en la que los hilos se pueden: Crear o destruir (otros hilos). Intercambiar información entre hilos. Planificar la ejecución de los mismos. Salvar y restaurar el contexto de los mismos. Programación Concurrente y Distribuida Procesos e Hilos Ventajas y desventajas del uso de los hilos Computación en Sistemas Distribuidos Hilos a nivel de núcleo Programación Concurrente y Distribuida Procesos e Hilos Hilos a nivel de núcleo El núcleo mantiene la información de contexto del proceso y de los hilos. Los hilos son visibles por el núcleo. La planificación se realiza a nivel de los hilos. Los hilos del mismo o distinto proceso compiten por el procesador. Programación Concurrente y Distribuida Procesos e Hilos Hilos a nivel de núcleo. Ventajas y desventajas. Computación en Sistemas Distribuidos Combinación de los niveles Programación Concurrente y Distribuida Procesos e Hilos Combinación de los niveles La creación de hilos se da en el espacio de usuario. La planificación y sincronización se da en el espacio de usuario. Varios hilos de usuario se asocian con varios hilos a nivel de núcleo. Ventajas: o Los hilos de un mismo proceso se pueden ejecutar en paralelo en varios procesadores. o Las llamadas al sistema bloqueantes no necesitan bloquear todo el proceso. Computación en Sistemas Distribuidos Hilos en Java Programación Concurrente y Distribuida Procesos e Hilos Usando el método run() La manera más inmediata para que un programa sea multihilo pasa por heredar la clase thread, la cual posee el método run (), este método se invoca cuando se inicia un hilo. Para utilizarlo, debemos de redefinirlo y escribir el código que se ejecuta dentro del hilo, dentro de run (). Un hilo termina cuando finaliza el método run (). Programación Concurrente y Distribuida Procesos e Hilos Usando el método run() Programación Concurrente y Distribuida Procesos e Hilos Usando la interfaz runnable Existe otra manera de crear los hilos en Java, mediante la interfaz runnable. Si la clase implementa la interfaz Runnable, el hilo se puede ejecutar pasando una instancia de la clase al constructor de un objeto Thread y luego llamando al método start() del hilo Programación Concurrente y Distribuida Procesos e Hilos Usando la interfaz runnable Programación Concurrente y Distribuida Procesos e Hilos Problemas de concurrencia Dado que los subprocesos se ejecutan al mismo tiempo que otras partes del programa, no hay forma de saber en qué orden se ejecutará el código. Cuando los subprocesos y el programa principal leen y escriben las mismas variables, los valores son impredecibles. Los problemas que surgen de esto se denominan problemas de concurrencia. Programación Concurrente y Distribuida Procesos e Hilos Problemas de concurrencia Ejemplo Un ejemplo de código en el que el valor de la variable amount es impredecible: Programación Concurrente y Distribuida Procesos e Hilos Problemas de concurrencia Para evitar problemas de concurrencia, es mejor compartir la menor cantidad posible de atributos entre subprocesos. Si es necesario compartir atributos, una posible solución es utilizar el método isAlive() del subproceso para comprobar si el subproceso ha terminado de ejecutarse antes de utilizar cualquier atributo que el subproceso pueda cambiar. Programación Concurrente y Distribuida Procesos e Hilos Problemas de concurrencia Uso del método isAlive() Programación Concurrente y Distribuida Procesos e Hilos Hacer que un hilo espere a otros hilos Uso del método join() Programación Concurrente y Distribuida Procesos e Hilos Hacer que un hilo espere a otros hilos Uso del método join() Esta instrucción hace que el subproceso actual espere a que se complete el subproceso t1 antes de continuar. En el programa, el subproceso actual (principal) espera a que se complete el subproceso t1: Programación Concurrente y Distribuida Procesos e Hilos Hacer que un hilo espere a otros hilos Uso del método join() En este programa, el subproceso actual (principal) siempre termina después de que se complete el subproceso t1. Por lo tanto, el mensaje "Soy principal" siempre se imprime al final: Programación Concurrente y Distribuida Procesos e Hilos Hacer que un hilo espere a otros hilos Uso del método join() En este programa, el subproceso actual (principal) siempre termina después de que se complete el subproceso t1. Por lo tanto, el mensaje "Soy principal" siempre se imprime al final: Programación Concurrente y Distribuida Procesos e Hilos Hacer que un hilo espere a otros hilos Uso del método join() También puede unir varios subprocesos con el subproceso actual, por ejemplo: En este caso, el subproceso actual tiene que esperar a que se completen los tres subprocesos t1, t2 y t3 antes de poder reanudar la ejecución. Computación en Sistemas Distribuidos ¡Muchas Gracias! ¿Preguntas?

Use Quizgecko on...
Browser
Browser