Introducción y Threads Programación Concurrente

Slides:



Advertisements
Presentaciones similares
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Advertisements

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Programación Interactiva Hilos
Tema 12: Programación multihilo
 son segmentos de código de un programa que se ejecutan secuencialmente de modo independiente de las otras partes del programa.
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.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
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.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
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.
TEMA 2. Programación Concurrente
Algoritmos y programación 3 - cátedra Fontela Concurrencia.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
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.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Tema 1: Concurrencia con Java
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Vinculación de Instrucciones y Datos a Memoria Tiempo de compilación: si la dirección de memoria se conoce a priori, se puede generar código absoluto;
COMPUTACION PARALELA GLORIA PATRICIA FLOREZ ANGIE PAOLA ANCHICO.
Clasificación del Software Prof. Laura Cardozo. Software Se denomina software, programática, equipamiento lógico o soporte lógico a todos los componentes.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Generalidades. Introducción a los procesos
Proceso: Una instancia de un programa en ejecución
Capítulo 5 Silberschatz Galvin
Introducción a la programación en JAVA
Hardware de Computador
Estructuras de interconexión de un computador
SISTEMAS OPERATIVOS Sección Crítica.
Rafael Asprilla Universidad de Panamá ,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Procesos Concurrentes
Métodos y parámetros.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Registro y transferencia para manejo de interrupciones
Concepto de proceso Rina Arauz.
Métodos en Java.
Paul Leger Procesos Paul Leger
HILOS EN SISTEMAS DISTRIBUIDOS
Etapas de desarrollo de un Sistema Operativo
¿Qué es JAVA? Es un lenguaje de programación para añadir interactividad, dinamismo entre otras funcionalidades al contenido de una pagina web. El.
Diseño y Programación Orientada a Objetos
Computación Curso 2017.
ALGORTIMO Y PROGRAMA REDES PETRI
MENU SOFWARE Y HADWARE DISPOSITIVOS DE SALIDA DISPOSITIVOS DE ENTRADA
Gestión de Procesos José Ruiz, Eudald Gómez.
Ayudantía 3: Procesos y threads
PROCESOS COMENZAR.
Almacenamiento El computador tiene 2 aspectos
DOCENTE: EMILIO ISMAEL BUSTAMANTE MONTES
Java – programación orientada a objetos programación ii – iee
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS.
Sistemas Operativos Componentes Ejecutivo de Tiempo Real.
CICLOS EN JAVA FOR, WHILE, DO WHILE Un ciclo en Java o bucle en Java (como prefieras llamarlo) permite repetir una o varias instrucciones cuantas veces.
MC Beatriz Beltrán Martínez Verano 2018
“Conceptos Básicos de Java”
EJECUCION PARALELA THREADS Y FIBERS
ESTRUCTURA DE SISTEMAS OPERATIVOS Carbajal Rojas karla.
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
Objetos con linea de ejecucion propia
Programación Orientada a Objetos
SISTEMAS OPERATIVOS JOSE ANGEL MORENO B. Ingeniero de Sistemas TP # Copnia Universidad Incca de Colombia CORPORACI Ó N UNIVERSITARIA REMINGTON.
Procesos Lic. Gonzalo Pastor.
Estructura de los sistemas operativos
SISTEMAS OPERATIVOS En el mundo de la informática se denomina sistema operativo al programa, o conjunto de ellos, que gestiona los recursos físicos de.
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
Transcripción de la presentación:

Introducción y Threads Programación Concurrente   BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN   Introducción y Threads PUEBLA, PUEBLA 2006 Programación Concurrente 20/09/2018 Intro Threads

Programación concurrente. Def. Es el nombre dado a las técnicas de programación para expresar el paralelismo potencial y resolver los problemas de comunicación y sincronización. La programación concurrente es importante, por que provee un mecanismo abstracto en el cual se estudia el paralelismo sin preocuparse de los detalles de la implementación. (Ben-Ari, 1982) 20/09/2018 Intro Threads

Programación concurrente Un programa secuencial tiene un solo Thread (Hilo) de control. A su ejecución se le llama un proceso. Un programa concurrente tiene múltiples threads de control. Éstos pueden ser ejecutados como procesos paralelos. 20/09/2018 Intro Threads

Programación concurrente, secuencial y paralela. 20/09/2018 Intro Threads

Ejecución de un programa concurrente Un programa concurrente se puede ejecutar mediante: Multiprogramación: procesos que comparten uno o más procesadores. Multiprocesamiento: cada proceso se ejecuta en su propio procesador pero con memoria compartida. Procesamiento Distribuido : cada proceso se ejecuta en su propio procesador conectado a otros mediante una red de computadoras. 20/09/2018 Intro Threads

En todos los casos anteriores, los principios básicos de la programación concurrente son los mismos. 20/09/2018 Intro Threads

Los Sistemas Operativos generalmente proveen una abstracción lógica para el hardware fundamental, los programas concurrentes se basan en tales abstracciones. Así, en un nivel de programación, los programadores no distinguen entornos de hardware que contienen múltiples o un solo CPU, ellos escriben programas usando tales abstracciones lógicas como threads, procesos, recursos, etc. 20/09/2018 Intro Threads

20/09/2018 Intro Threads

¿Por qué necesitamos programas concurrente? Mejorar la disponibilidad y eficiencia Modelar tareas, objetos autónomos, animación Paralelismo: múltiples procesadores, simultanear E/S Protección: aislar actividades en hilos de ejecución. Ejemplos: • Tareas con mucha E/S: acceso a sitios Web y bases de datos. • Interfaces gráficas de usuario: gestión de eventos • Demonios con múltiples peticiones de servicio simultáneo • Simulación 20/09/2018 Intro Threads

Las aplicaciones concurrentes introducen complejidad. Seguridad: procesos concurrentes pueden causar conflictos con datos compartidos. Liveness: los procesos pueden morir de “inanición" si no se coordinan adecuadamente. No-determinismo: el mismo programa que se ejecuta dos veces puedes mostrar resultados diferentes. 20/09/2018 Intro Threads

Procesos y Threads Un proceso es un programa en ejecución. El sistema operativo asigna todos los recursos que necesitan tales procesos. Un thread es un Hilo de ejecución dentro de un proceso. Eso significa que un proceso puede tener varios threads ejecutándose en el ámbito de un proceso particular. 20/09/2018 Intro Threads

Mientras un thread tiene acceso al espacio de direcciones de memoria y recursos de su proceso, un proceso no puede acceder a variables asignadas a otros procesos. 20/09/2018 Intro Threads

Conclusiones de la propiedad anterior La comunicación entre threads creados dentro de un solo proceso es simple debido a que los threads comparten todas las variables. Así, un valor producido por un thread está inmediatamente disponible para todos los demás threads. Los threads toman memos tiempo para iniciar o detenerse debido a que usan el espacio de dirección ya asignada para el proceso corriente. 20/09/2018 Intro Threads

Planificación de CPU y Cambio de Contexto Los procesos son ejecutados por el procesador a intervalos regulares (cuantum). Cada intercambio de CPU de un proceso a otro es llamado cambio de contexto. Los valores de los registros del CPU se salvan en la tabla de procesos del proceso que se estaba ejecutando cuando ocurre una interrupción. 20/09/2018 Intro Threads

Que es un Thread? Flujo de control diferente que puede ejecutar sus instrucciones de forma independiente. Concepto abstracto que se compone de todo lo que hace una computadora al ejecutar un programa tradicional Proceso VS Thread. Un Proceso es un código de programa en algún estado de ejecución, incluye: asignación de memoria virtual, descriptores de ficheros, ID de usuario, etc. Un Thread es una entidad ligera que tiene su propio contador de programa, otros valores de registros de CPU, tiempo de ejecución. 20/09/2018 Intro Threads

Estados de Hilos o Threads Cuando nace el hilo espera hasta que se invoque el método start() del hilo. El hilo listo de más alta prioridad pasa al estado de ejecución. Un hilo pasa a su estado muerto cuando termina el método run() o cuando se invoca el método stop() Un hilo en ejecución pasa al estado bloqueado cuando el hilo emite una solicitud de E/S. Un hilo bloqueado no puede usar el procesador aunque este desocupado. 20/09/2018 Intro Threads

Ciclo de vida o estado de un Thread 20/09/2018 Intro Threads

Métodos de la clase Thread La clase principal ejecuta el método start() de ese hilo. Start invoca el método run() Start lanza una excepción de un hilo ilegal (IllegalThreadStateException). Si el hilo que trata de echar de andar ya esta corriendo Static sleep. Se invoca con un argumento de tiempo para que duerma Static Interrupt. Devuelve true si el hilo ha sido interrumpido. Suspend. Suspende la ejecución del hilo y resume reanuda la ejecución del hilo 20/09/2018 Intro Threads

Yield. Ceder el paso dependiendo de las prioridades. Stop. Detiene el hilo. isAlive. Devuelve true si se ha invocado start para un hilo si todavía no se ha invocado stop. Yield. Ceder el paso dependiendo de las prioridades. setName. Establece el nombre del Thread. Static currentThread. Referencia al hilo actual 20/09/2018 Intro Threads

Prioridad y planificación de hilos Todo hilo tiene una prioridad en el intervalo de Thread.MIN_PRIORITY (vale 1), Thread.MAX_PRIORITY (vale 10) y Thread.NORM_PRIORITY(vale 5) Tajadas de tempo. Cada hilo recibe un lapso de tiempo de procesador llamado cuanto. El procesador le quita el tiempo al expirar este hilo y continua con el siguiente. 20/09/2018 Intro Threads

Un proceso termina hasta que todos los hilos terminan su ejecución. Se posterga si se crean mas hilos. setPriority. Modifica la prioridad del hilo El hilo puede llamar el método yield() para dar oportunidad de ejecutarse. 20/09/2018 Intro Threads

Métodos para crear Threads en Java Existen 2 métodos para crear Threads 1er Método. Los Threads se implementan como objetos que contienen un método llamado run(). Class MyThread extends Thread{ publiC void run(){ { //Cuerpo de ejecución Thread} } //Fin de la clase thread 20/09/2018 Intro Threads

2do. Método. Utilizando la interfase Runnable Class Mythread implements Runnable{ . . . public void run(){ // cuerpo de ejecución del thread } } //fin del clase 20/09/2018 Intro Threads

Ejemplo 1. Utilizando la clase Thread Class MyThread extends Thread{ public void run(){ system.Out.println(“this thread is running”); } } class MyThreadEx1{ public static void main(String [] arg){ MyThread t = new MyThread(); t.start(); } 20/09/2018 Intro Threads

Ejemplo 2. Utilizando la interfase Runnable. Class MyThread implements Runnable{ public void run(){ system.Out.println(“this thread is running”); } } class MyThreadEx2{ public static void main(String [] arg){ Thread t = new Thread(new MyThread()); t.start(); } 20/09/2018 Intro Threads

Manipulación de un Thread El cuerpo del método run() viene a ser el cuerpo del programa. Decimos que es la rutina main a nivel de thread. Todo lo que queremos que realice el Thread debe estar dentro del método run(). Cuando finalice run(), finalizará también el thread que lo ejecutaba. 20/09/2018 Intro Threads

Otro ejemplo para afianzar. Class Repeticion extends Thread{ Private int repeticiones; Private String mensaje; Repeticion(String msg, int n){ mensaje=msg; repeticiones=n;} Public void run(){ For(int i= 1; i<=repeticiones; i++) system.out.println(“mensaje+” “+i); } Public static void main(String [] arg){ Repeticion r1=new Repeticion(“Rojo”,5); Repeticion r2=new Repeticion(“Azul”,15); R1.start(); R2.start(); } 20/09/2018 Intro Threads

El último ejemplo, de verdad! public class UnHilo extends Thread{ public UnHilo(String str){ super(str);} public void run(){ for(int i=0;i<10;i++){ System.out.println(i+” “+getName()); try{ sleep((long)(Math.random()*1000); }catch(InterruptedException e){} } System.out.println(“Listo! “+getName()); } } 20/09/2018 Intro Threads

Continuación. public class DosHilos { public static void main(String [] args){ new UnHilo(“Me llamo thread 1”).start(); new UnHilo(“Yo soy el thread 2”).start(); } }//fin de DosHilos 20/09/2018 Intro Threads

¿Qué aprendieron? Qué imprime el siguiente programa con threads? Evaluación! ¿Qué aprendieron? Qué imprime el siguiente programa con threads? 20/09/2018 Intro Threads