INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.

Slides:



Advertisements
Presentaciones similares
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Advertisements

GESTION DE PROCESOS.
2. Manejo de memoria Manejo de memoria estática
TEMA 1 Introducción a la Programación Concurrente
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Programación Interactiva Hilos
Lenguaje de programación Java
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
Concurrencia En el mundo real pasan muchas cosas a la vez
Aplicación del paradigma orientado a objetos
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (apunts de l’assignatura en format transparència) Multithreading and.
Tema 12: Programación multihilo
7a.1 Silberschatz, Galvin y Gagne ©2003 Sistemas Operativos 6ª edición Capítulo 7: Sincronización de procesos parte a.
 son segmentos de código de un programa que se ejecutan secuencialmente de modo independiente de las otras partes del programa.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
10. Hilos Definición y ejecución Thread y Runnable
Java. Threads (Hebras) Los sistemas operativos actuales permiten la multitarea, aunque esta se de tiempo compartido cuando se trabaja con un solo procesador.
Modificadores.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Concurrencia: interbloqueo e inanición
SCJP Sun Certified Programmer for Java 6
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Sistemas Operativos Procesos.
Semáforos Cecilia Hernández
Unidad III Administración de procesos
Introducción a la Programación. Lenguaje de Máquina.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
Sistemas en tiempo real (STR)
Animación usando Threads (lógica) Tema 10. Threads Definición: Un thread es un flujo secuencial de control dentro de un programa. Definición: Un thread.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
 El acceso concurrente a datos compartidos puede dar pie a inconsistencia de datos  Mantener la consistencia de los datos requiere mecanismos para asegurar.
SISTEMAS OPERATIVOS.
Gestión de procesos Sistemas Operativos Edwin Morales
Programación secuencial vs programación concurrente
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Paquetes e interfaces.
Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Integrantes: Ma Carmen Zaragoza Santiago Leticia González Hernández Abraham Obispo Antonio Alexis González Ramírez Eduardo Hernández Tolentino.
TEMA 2. Programación Concurrente
Administrador de procesos
Algoritmos y programación 3 - cátedra Fontela Concurrencia.
Teoría de Sistemas Operativos Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz
Informática III 2009 Ing. Estela D'Agostino 1 Programación secuencial vs programación concurrente Pascal, C, Fortran, Cobol Secuenciales único hilo de.
Teoría de Sistemas Operativos Sincronización Procesos
Unidad 2 – Gestión de Procesos
Por Luis Esteban Monsalve Martínez
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
UTFSM - Sistemas Operativos
THREADS JAVA Ing. Esp. Ricardo Cujar. HILO Un hilo es un proceso que se está ejecutando en un determinado momento en el sistema operativo. Se les define.
Elementos y tipos de sistemas operativos
Hilos y Multihilos Un thread (hilo, flujo de control del programa) representa un proceso individual ejecutándose en un sistema. A veces se les llama.
Hilos Java Profesor Elian Rojas Berrocal
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Desventajas Poco eficiente: lectura y escritura en disco es lenta Necesita otro mecanismo de sincronización para acceder a los datos Son los procesos.
Tema 1: Concurrencia con Java
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Transcripción de la presentación:

INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA

CONCURRENCIA CONCURRENCIA en JAVA THREADS: –CONCEPTOS BÁSICOS –SINCRONIZACIÓN –PRIORIZACIÓN –GRUPOS DE THREADS Java.util.concurrency

Ing. E. D'AgostinoINFORMATICA III Concurrencia Vida real Sucesos concurrentes Desarrollo de software Representar estos sucesos concurrentes

Ing. E. D'AgostinoINFORMATICA III Concurrencia Programa con un único flujo de control Abandonar Debo poder desarrollar programas con múltiples flujo de control

Ing. E. D'AgostinoINFORMATICA III Concurrencia ProcesosThreads Recursos propios Existen dentro de un proceso

Ing. E. D'AgostinoINFORMATICA III Thread principal Cada programa java tiene al menos un thread, el thread principal (main). Este puede ejecutar otros threads.

Ing. E. D'AgostinoINFORMATICA III Concurrencia Programación concurrente Notaciones y técnicas para expresar la ejecución concurrente de procesos.

Ing. E. D'AgostinoINFORMATICA III Concurrencia Programación concurrente Sistema operativo Lenguaje de programación

Ing. E. D'AgostinoINFORMATICA III Concurrencia Máquinas con un núcleo de ejecución simple Time slicing Máquinas con más de un núcleo de ejecución simple o con varios procesadores Hace más eficiente la ejecución concurrente de procesos

Ing. E. D'AgostinoINFORMATICA III Si no comparto recursos no tengo problemas. Si comparto recursos debo tener una forma de que estos no caigan en inconsistencias y evitar el caso de que dos flujos quieran utilizar juntos el mismo recurso. Concurrencia

Ing. E. D'AgostinoINFORMATICA III Concurrencia en Java Antes de la version JDK 1.5Monitores Después de la version JDK 1.5 Semáforos

Ing. E. D'AgostinoINFORMATICA III THREAD / HILO Un programa Un thread Un thread es un flujo de control secuencial en un programa.

Ing. E. D'AgostinoINFORMATICA III MULTIPLES THREADS Un programa dos threads

Ing. E. D'AgostinoINFORMATICA III Java soporta la ejecución paralela de varios threads (hilos) múltiples threads ejecutándose en una máquina pueden compartir recursos (ejemplo: memoria) múltiples threads ejecutándose en varias máquinas necesitan capacidades de comunicación Concurrencia

Ing. E. D'AgostinoINFORMATICA III Manejo de la Concurrencia Dos formas de implementación: Ejecución de un hilo hasta que termine o se autobloquee (actividades de E/S) (deja el control) Ejecución de un hilo hasta que el SO le saque el control, puede que, antes que le saque el control, termine o se autobloquee. (cantidad de tiempo)(es desalojado)

Ing. E. D'AgostinoINFORMATICA III Formas de crear threads 1.Instanciando un objeto runnable: public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); } }

Ing. E. D'AgostinoINFORMATICA III Formas de crear threads 2.Creando una clase extendida de thread: public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new HelloThread()).start(); } }

Ing. E. D'AgostinoINFORMATICA III Formas de crear threads ¿Porqué existirán dos formas? ¿Cual usar? ¿Porqué?

Ing. E. D'AgostinoINFORMATICA III Java es único entre los lenguajes de propósitos generales que pone primitivas de concurrencia a disposición del programador Java.lang.Thread THREAD

Ing. E. D'AgostinoINFORMATICA III Ejemplos de aplicaciones concurrentes Descargas de grandes archivos de la WWW Construcción de interfases gráficas Recolección de basura de Java (garbage colector)

Ing. E. D'AgostinoINFORMATICA III Inicio de la ejecución de un hilo Se invoca al método start. Este crea los recursos necesarios del sistema para ejecutar el thread, y llama al método run del thread. El invocador se ejecuta en paralelo con el thread

Ing. E. D'AgostinoINFORMATICA III Estados de hilos: ciclo de vida nacidolisto ejecución muerto dormidosuspendidoen espera bloqueado Solicitud E/S Completar E/S Expira el tiempo Termina quantum Asignar procesador Invocación de métodos Invocación de un método Cumplió condición ejecutable parado

Ing. E. D'AgostinoINFORMATICA III Sincronización Pueden operar en forma independiente. Cada uno tiene todos los datos y métodos que necesita. No necesito sincronización

Ing. E. D'AgostinoINFORMATICA III Comparten datos y deben considerar el estado y las actividades de otros threads. Sincronización Errores: interferencia de threads inconsistencia de memoria

Ing. E. D'AgostinoINFORMATICA III Comparten datos y deben considerar el estado y las actividades de otros threads. Necesito sincronización Sincronización

Ing. E. D'AgostinoINFORMATICA III Sincronización Iinterferencia de threads: múltiples threads acceden a datos compartidos Errores de inconsistencia en la memoria: son errores que resultan de vistas inconsistentes de la memoria. Métodos sincronizados: métodos simples que pueden prevenir los dos errores anteriores Candados implícitos y sincronización: la sincronización está basada en candados implícitos

Ing. E. D'AgostinoINFORMATICA III Interferencia de threads class Counter { private int c = 0; public void increment() { c++; } //recuperar el valor de c //incrementarlo en 1 //almacenarlo nuevamente public void decrement() { c--; } //recuperar el valor de c //decrementarlo en 1 //almacenarlo nuevamente public int value() { return c; } }

Ing. E. D'AgostinoINFORMATICA III Errores de inconsistencia en la memoria Los valores almacenados en memoria van a depender de la secuencia en que se ejecuten las acciones cuando haya múltiples threads compartiendo un objeto.

Ing. E. D'AgostinoINFORMATICA III Métodos sincronizados Los métodos que tengan que acceder al mismo objeto, se deben declarar “synchronized” para lograr el bloqueo. La ejecución de dos métodos sincronizados es mutuamente excluyente.

Ing. E. D'AgostinoINFORMATICA III public class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c-- ; } public synchronized int value() { return c; } } Definición de métodos sincronizados

Ing. E. D'AgostinoINFORMATICA III class Account { private double balance public Account ( double inicial) { balance=inicial; } public synchronized double getBalance{ return balance; } public synchronized void deposito (double amount) { balance += amount; }} Definición de métodos sincronizados

Ing. E. D'AgostinoINFORMATICA III Candados implícitos y sincronización Cuando un thread invoca un método sincronizado es como si encerrara el objeto con un candado, de forma que nadie pueda accederlo. Lo libera cuando el método ejecuta un return.

Ing. E. D'AgostinoINFORMATICA III PRODUCTOR - CONSUMIDOR Problema tipo que ejemplifica la necesidad de sincronización

Ing. E. D'AgostinoINFORMATICA III Escenarios productor /consumidor Un thread escribe datos en un archivo Otro thread lee datos del archivo Comparten recursos debo sincronizarlos Sincronización

Ing. E. D'AgostinoINFORMATICA III Sincronización Thread bloquea Thread Solo un thread por vez puede acceder a un objeto

Ing. E. D'AgostinoINFORMATICA III Sincronización de hilos Java usa monitores para la sincronización de hilos. Todo objeto con métodos “synchronized” es un monitor. El monitor sólo permite a un hilo por vez ejecutar un método “synchronized” sobre el objeto.

Ing. E. D'AgostinoINFORMATICA III Métodos sincronizados Instancia (bloquean objetos) Clase (bloquean clases)

Ing. E. D'AgostinoINFORMATICA III Como trabajan los threads Crear un thread Configurarlo : nombre, prioridad,etc. Ejecutarlo : invocar el método start, éste invoca al método run cuando run devuelve el control el thread ha terminado.

Ing. E. D'AgostinoINFORMATICA III Prioridades de los threads La prioridad de un thread lo afecta cuando se está ejecutando en relación a otros threads.

Ing. E. D'AgostinoINFORMATICA III Prioridades SOentrega el control a uno wait suspend sleep I/O estado listo prioridad 10 estado listo prioridad estado listo prioridad 1 yield otro de prioridad mayor pasa a listo expira su quantum

Ing. E. D'AgostinoINFORMATICA III Planificación de threads Mantener un hilo de máxima prioridad ejecutándose en todo momento, de acuerdo a la forma en que maneje la concurrencia. La aparición de hilos de alta prioridad puede posponer indefinidamente la ejecución de hilos de prioridades bajas

Ing. E. D'AgostinoINFORMATICA III Prioridades de los Threads Todo thread en Java tiene una prioridad en el intervalo : Thread.MIN_PRIORITY( constante que vale 1 ) Thread.MAX_PRIORITY( constante que vale 10 ) Thread.NORM_PRIORITY ( constante que vale 5 )

Ing. E. D'AgostinoINFORMATICA III Un hilo puede llamar al método yield para dar oportunidad a otros hilos de su misma prioridad a ejecutarse, esto se usa siempre que el manejo de la concurrencia no este basada en quantum. Planificación de threads

Ing. E. D'AgostinoINFORMATICA III Un hilo se ejecuta hasta que ocurre alguna de las situaciones siguientes: muere. se bloquea para entrada/salida. invoca a sleep. invoca a yield. es desalojado por un hilo de mayor prioridad. expira su quantum. Planificación de threads

Ing. E. D'AgostinoINFORMATICA III Un hilo con prioridad más alta que el que se está ejecutando, puede desalojar a éste si: si invoca a resume. si se acaba el período de sleep. si se completa la E/S por la cual se bloqueo. si se invoca notify o notifyAll para un hilo que había invocado wait. Planificación de threads

Ing. E. D'AgostinoINFORMATICA III Ejemplo: Sincronización de hilos

Ing. E. D'AgostinoINFORMATICA III Grupos de hilos Permite identificar varios hilos como pertenecientes a un grupo de hilos. La clase ThreadGroup contiene los métodos necesarios para crear y manipular grupos de hilos. El grupo tiene un nombre único. Los grupos se pueden tratar colectivamente.

Ing. E. D'AgostinoINFORMATICA III Técnicas de concurrencia Exclusión mutua: utilizar variables de datos compartidas entre procesos. Secciones críticas: aquellas parte de los programas que no pueden ejecutar concurrentemente dos procesos. Bloqueo: Se debe poder bloquear las secciones críticas.

Ing. E. D'AgostinoINFORMATICA III Asegurarse que no ocurra interbloqueo.(dos threads se bloquean uno a otro) Asegurarse que no ocurra cierre. (un thread depende de la acción de otro y este a su vez de la acción de otro y ninguno progresa) Técnicas de concurrencia

Ing. E. D'AgostinoINFORMATICA III Semáforos: indicador que registra si un recurso está disponible o no. –inicializar(Semáforo s, int v) –espera (s) (bloquea) –señal (s) (desbloqueo) Técnicas de concurrencia

Ing. E. D'AgostinoINFORMATICA III Monitores: conjunto de procesos que proporciona el acceso a la sección crítica con exclusión mutua. Sólo un proceso puede estar activo por vez para ejecutar un proceso del monitor. Mas problemas para sincronización que con semáforos. Técnicas de concurrencia

Ing. E. D'AgostinoINFORMATICA III Java.util.concurrency Provee objetos de alto nivel de concurrencia: Objetos lock: provee objetos que simplifican las aplicaciones concurrentes. Solo un thread puede apropiarse de un objeto lock

Ing. E. D'AgostinoINFORMATICA III Interfaces Interfaces ejecutoras: Executor, una interface que soporta lanzar nuevas tareas. ExecutorService, una subinterface de Executor, que agrega características que ayudan a manejar el ciclo de vida, de las tareas y de Executor. ScheduledExecutorService, una subinterface de ExecutorService, soporta la ejecución de tareas periódicas y/o futuras.