psp-b1 hilos y procesos
UT 1: concurrencia. programación multihilo
P1. HILOS Y PROCESOS
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
JUSTIFICACIÓN DEL LENGUAJE
- Java es un lenguaje de propósito general muy utilizado en el entorno empresarial.
- Java tiene un gran soporte de librerías.
- Java cuenta con una buena documentación.
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
Antaño los programas solían ser secuenciales.
eugeniaperez.es
Línea de control de flujo
El tiempo no influye en el resultado
Presentaba limitaciones
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
Los programas concurrentes permiten ejecutar tareas simultáneamente
eugeniaperez.es
Múltiples líneas de control de flujo
Mejora sustancial del rendimiento y velocidad
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
EJECUCIÓN SECUENCIAL TRADICIONAL
- Método lento
- Tiempo de CPU desaprovechado
- Peor rendimiento
¿Posible solución?
Programación CONCURRENTE
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
EJECUCIÓN CONCURRENTE
- Hace unos años los ordenadores solo disponían de un procesador
- Repartir el tiempo de la CPU entre los procesos
- Actualmente los equipos disponen de varios núcleos
- Mejor soporte a la concurrencia
- Optimización de los recursos del sistema
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
HILOS VS PROCESOS
Tienen características comunes pero...
¿Son lo mismo?
PROCESO
Es un programa ejecutándose de forma independiente y con un espacio propio de memoria.
Hilo
Flujo secuencial simple dentro de un proceso.
Chrome
PESTAÑAS
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
Un proceso puede estar formado
por múltiples hilos
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
- Los procesos son las unidades básicas de ejecución en la programación concurrente
- Representan un flujo de control en ejecución
- En el contexto de un Sistema Operativo
- Un proceso es un programa que está siendo ejecutado
- Proceso = programa + datos + recursos
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
- Un hilo es un flujo secuencial de ejecución independiente dentro de un programa
- Todo programa tiene al menos un hilo
- Un programa con más de un hilo es un programa multihilo
- Todos los hilos comparten el procesador (si solo hay uno)
- El SO decide cuándo cada hilo consigue la CPU
- scheduling (planificación de hilos)
- La programación multihilo puede ser complicada sobre todo cuando se requiere sincronización entre hilos
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
- Cuando se inicia un programa en Java
- la máquina virtual crea un hilo principal
- este hilo se encarga de invocar al método main() de la clase que se comience a ejecutar
- el hilo termina cuando finaliza el método main()
- si el hilo principal crea otros hilos, éstos se ejecutan de forma concurrente
- cuando no queda ningún hilo activo el programa termina
- Todos los hilos se ejecutan en la misma máquina virtual (mismo proceso)
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT 1: HILOS Y PROCESOS
Planificador de hilos
eugeniaperez.es
- Habitualmente hay más hilos que CPU
- El Thread Scheduler es el responsable de asignar la CPU de alguna manera entre todos los hilos que compiten por ella
- Es parte del SO
- Los SO asignan a cada hilo una pequeña cantidad de tiempo de procesador llamada quantum o time slice. Cuando este tiempo termina el hilo deja de ejecutarse y el SO asigna a otro hilo nuevamente tiempo de procesador
- En los SO modernos se utiliza preemtive scheduling
- los hilos más prioritarios se ejecutan antes http://www.javamex.com/tutorials/threads/thread_scheduling.shtml
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
Cuando el planificador quiere dar tiempo de CPU a un proceso distinto al que está en ejecución, se produce un cambio de contexto
Coste computacional elevado
Solución -> hilos
- Cambio de contexto más eficiente debido a que los hilos de un mismo proceso comparten recursos
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
Pero... ¿qué comparten y qué no?
UT 1: HILOS Y PROCESOS
THE CODING LOVE
Java -> lenguaje multihilo
Añadimos complejidad...
eugeniaperez.es
p 1: HILOS Y PROCESOS
Aplicaciones de los hilos
eugeniaperez.es
- Para mejorar el rendimiento de aplicaciones que hacen un uso extensivo de operaciones de IO
- Para mejorar la respuesta de las aplicaciones con interfaz gráfico
- una aplicación con GUI puede quedar “congelada”...
- Para atender las peticiones de dos o más clientes simultáneamente en aplicaciones basadas en servidor
- servidor web, un chat
- Para efectuar animaciones
¿APLICACIONES DE LOS HILOS?
UT 1: HILOS Y PROCESOS
Ejercicios
- Dudas en el ejercicio 4 (flujos de texto)
- Corrección de la entrega II
- Lee y realiza las tareas finales de la página de Procesos
- Solo si te da tiempo... Realiza el ejercicio 6
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
Text
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
¿daemon ...?
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
SIMILITUDES
- Pueden estar sólo en un estado a la vez (principalmente ejecutando, listo y bloqueado).
- Comparten la CPU y sólo un hilo puede estar activo a la vez.
- Cuando se ejecutan cada uno tiene su propio contador de programa, pila y registros.
- Pueden crear otros hilos hijos.
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
DIFERENCIAS
- Los hilos no son independientes unos de otros, pueden acceder a cualquier variable dentro del proceso.
- Un hilo puede leer o escribir sobre las stacks (pilas) de los otros.
- No existe una jerarquía, ya que todos pertenecen al mismo pool y un hijo puede sobrevivir al padre.
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
VETE A GIT > CLONE, BUSCA LA URL DE LOS PROYECTOS EN BITBUCKET:
- PSP.UT1.LiftOff
- PSP.UT1.LiftOffThread
- PSP.UT1.MessagePrinter
- PSP.UT1.MessagePrinterSleep
INTRODUCE LAS CREDENCIALES EN NETBEANS:
usuario: cuatrovientos
password: Cuatrovientos
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
- Un hilo ejecuta una tarea.
- Una forma de implementar TAREAS lo anterior es a través de la interfaz Runnable.
- También se debe escribir un método run() para hacer que la tarea realice su trabajo.
- Por lo tanto, una tarea es cualquier objeto que realiza una acción... Pero en este caso debe cumplir que implemente el método run().
UT 1: HILOS Y PROCESOS
REPASO...
eugeniaperez.es
INTERFACES EN JAVA
Cuando se implementa una interfaz, estamos obligados a implementar todos los métodos de la interfaz o hacerlos abstractos.
Si tienes dudas sobre interfaces...
Repasa el ejemplo que hay subido al aula: Interfaces
UT 1: HILOS Y PROCESOS
UT1. Hilos y procesos en Java
eugeniaperez.es
tarea en java:
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.5 - LiftOff
- Desde el main() se crea un hilo y se invoca a su run().
- El método run() es el que contiene la tarea a ejecutar: una cuenta atrás antes de un lanzamiento.
- En el run() normalmente se itera en bucle infinito o bien se establece una condición de salida.
- Thread.yield() es útil para que el planificador cambie de contexto.
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
- La forma tradicional de manejar hilos en Java es a través de la clase Thread().
- Esta clase recibe un objeto que implementa la interfaz Runnable.
- Al invocar al método start() de la clase Thread() se inicializa.
- Desde el propio método start() se invoca al run() sin que nosotros hagamos nada.
UT 1: HILOS Y PROCESOS
UT1. Hilos y procesos en Java
eugeniaperez.es
HILO en java:
UT 1: HILOS Y PROCESOS
REPASO...
eugeniaperez.es
Text
Thread t = new Thread(new LiftOff());
t.start();
Creación de hilos en Java:N
El objeto que recibe Thread debe
implementar Runnable y definir
su tarea en el run().
public class LiftOff implements Runnable {
...
public void run() {
while (countDown-- > 0) {
System.out.println(status());
Thread.yield();
}
}
...
}
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.6 - LiftOffThread
- ¿Por qué vemos primero “Waiting for LiftOff”?
- Veras la salida entremezclada y un resultado diferente cada vez que lo ejecutes...
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.7 - MessagePrinter
- Creamos varios hilos y los lanzamos con la intención de ejemplificar la intercalación de tareas...
- ¿Qué sucede...?
UT1. Proyecto 1.8 - MessagePrinterSleep
- Al añadir lógica más compleja (dormir al hilo 2 seg.) el planificador sí aprovecha para ir ejecutando la siguiente. Thread.sleep( mseg )
UT 1: HILOS Y PROCESOS
THE CODING LOVE
2 hilos compiten por la cpu....
Uno aprovecha que el otro
se duerme para su ejecución...
Thread.sleep(mseg)
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.8 - MessagePrinterSleep
- ¿Cuál es el tiempo total de ejecución?
- ¿Ha habido alguna mejora con respecto a una ejecución secuencial...?
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
PSP.UT1.ThreadTest - ThreadTest
- Copia el proyecto en tu IDE y analízalo.
- Ejecútalo
-
ENTREGA DE ACTIVIDAD 1 (pág. 47)
- Domingo 27 Septiembre
A)
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
PSP.UT1.ThreadTestRunnable:
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.threadtestrunnable.git
El Thread se crea "desde fuera" y la clase que recibe, SubprocessPrinter tiene que implementar Runnable.
b)
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
- Java es un lenguaje que no soporta la herencia múltiple,
- como si lo hace alguno de sus antecesores: C++
- La herencia es un mecanismo que hay que utilizar con cautela
- La opción B) no ocupa el lugar de la herencia. Si el día de mañana quisiéramos hacer uso de ella, por ejemplo para heredar de la clase Applet, no habría problema...
eugeniaperez.es
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
PSP.UT1.ThreadTestDecorator
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.threadtestrunnable.git
De esta forma la clase SubprocessPrinter implementa Runnable y, a su vez, contiene un Thread.
Se corresponde con un patrón de diseño llamado Decorator.
eugeniaperez.es
c)
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
COMO CURIOSIDAD... PATRÓN DE DISEÑO DECORATOR
- ¿Qué es un patrón de diseño...?
- Una buena práctica de programación...
- Decorator: patrón de diseño que sirve para añadir funcionalidad a clases ya existentes, quedándonos con lo que necesitemos y dando una implementación a lo que nos interesa (decorando...)
UT 1: HILOS Y PROCESOS
UT1. Hilos y procesos en Java
eugeniaperez.es
Text
A)
B)
C)
UT 1: HILOS Y PROCESOS
UT1. Hilos y procesos en Java
eugeniaperez.es
VENTAJAS DE LA TERCERA OPCIÓN
- La clase SubprocessPrinter no ocupa el puesto de la herencia.
- La clase que la utiliza (main o "cliente") no necesita conocer a SubprocessPrinter, solo crearlo.
- Lo anterior implica que la clase SubprocessPrinter es autónoma para ser ejecutada como un hilo que ejecuta una tarea en Java. Contiene el start().
UT 1: HILOS Y PROCESOS
UT1. Hilos y procesos en Java
TERCERA OPCIÓN
/**
* Name of the thread
*/
private Thread thread;
/**
* Assign a name to the subprocess calling the superclass constructor.
*
* @param name Name of the thread
*/
public SubprocessPrinter(String name) {
// select the sleeping time between 0 and 5 seconds
sleepingTime = (int) (Math.random() * 5000);
thread = new Thread(this, name);
thread.start();
}
UT 1: HILOS Y PROCESOS
UT1. Hilos y procesos en Java
TERCERA OPCIÓN
thread = new Thread(this, name);
thread.start();
La clase Thread tiene hasta 8 constructores. Si queremos que se ejecute nuestra tarea (la definida en el hilo) y no el run de la propia clase Thread, debemos construirlo con dicho objeto, que implementa Runnable, y, por tanto, define su tarea en su método run.
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
-
HILOS Y PROCESOS
- INTRODUCCIÓN
- ESTADOS DE UN PROCESO
- SIMILITUDES Y DIFERENCIAS
- CONCEPTOS BÁSICOS DE HILOS
- LA CLASE THREAD
- INTERCALACIÓN DE TAREAS
- PRIMER PROGRAMA CON HILOS
- TÉCNICAS DE PROGRAMACIÓN
eugeniaperez.es
UT 1: HILOS Y PROCESOS
REPASO
eugeniaperez.es
Ejecución de un hilo
- Clase Thread ( Runnable )
- La tarea se define en el run()
- El hilo se "prepara" mediante el start()
- El start() está declarado en la clase base Thread y se encarga de llamar automáticamente al método run(), cuando el planificador estima que es un buen momento...
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
Ejecución en paralelo
- Beneficio:
- mayor rendimiento
- reducción de tiempo de ejecución. Uso de CPU
- Proceso A -> 10 s
- Proceso B -> 9 s
- Ejecución en serie -> 19 s
- Ejecución en paralelo -> t < 19 s
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
Ejecución secuencial vs. en paralelo
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1 - Proyecto 1.9: PSP.UT1.Race:
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.race.git
- Enfoque secuencial
UT1 - Proyecto 1.9: PSP.UT1.ConcurrentRace
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.concurrentrace.git
- Enfoque ejecución paralela
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
Realiza las actividades de la pág. 47:
- Actividad 3 -> ejecución secuencial vs. paralela
- Actividad 4 ->
- PSP.UT1.Activity4
- https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.activity4.git
- Actividad 5 ->
- PSP.UT1.Activity5
- https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.activity5.git
UT 1: HILOS Y PROCESOS
1.1 Hilos y procesos en Java
eugeniaperez.es
ENTREGA: 3 Octubre 23:30
- Actividad 3
- Actividad 5
Súbela al aula -> Actividad 3, 5
- Realiza el test T.UT1
PSP UT1
By eugenia_perez
PSP UT1
- 1,225