3 1 Hilos
3 1 Hilos
3 1 Hilos
SISTEMAS
DISTRIBUIDOS
Docente. Mg. Maribel Molina Barriga
01 02 03 04
Procesos Hilos Virtualización Migración
Procesos
https://www.youtube.com/watch?v=j0RO-LX9rLA
HILOS
LOS HILOS (Thread)
6
LOS HILOS
7
LOS MULTIHILOS
(Multithread)
• En un sistema multihilos, cada tarea se inicia y termina tan pronto como sea posible, esto facilita la
entrada de datos en sistemas en tiempo real, especialmente si estos datos provienen de diferentes
fuentes.
• En un programa multihilo se tiene el hilo principal del programa en ejecución, quien a su vez tiene
otros hilos o tareas paralelas en ejecución.
• Una de las razones de importancia para el estudio de la programación multihilos es que permite
acceder a los recursos de tiempo libre de la CPU mientras se realizan otras tareas.
• La figura ilustra esquemáticamente un programa de un hilo y un programa de dos hilos.
8
CREACIÓN DE HILOS
• En Java los hilos están encapsulados en la clase Thread. Para crear un hilo tenemos dos posibilidades:
o Heredar de Thread redefiniendo el método run().
o Crear una clase que implemente la interfaz Runnable que nos obliga a definir el método run().
• En ambos casos debemos definir un método run() que será el que contenga el código del hilo. Desde
dentro de este método podremos llamar a cualquier otro método de cualquier objeto, pero este
método run() será el método que se invoque cuando iniciemos la ejecución de un hilo. El hilo
terminará su ejecución cuando termine de ejecutarse este método run().
9
CREACIÓN DE HILOS
• Al llamar al método start del hilo, comenzará ejecutarse su método run. Crear un hilo heredando de Thread tiene
el problema de que al no haber herencia múltiple en Java, si heredamos de Thread no podremos heredar de
ninguna otra clase, y por lo tanto un hilo no podría heredar de ninguna otra clase.
• Este problema desaparece si utilizamos la interfaz Runnable para crear el hilo, ya que una clase puede
implementar varios interfaces. Definiremos la clase que contenga el hilo como se muestra a continuación:
1
0
CICLO DE VIDA Y PRIORIDADES
• Cuando invoquemos su método start() el hilo pasará a ser un hilo vivo, comenzándose a ejecutar su método run().
• Una vez haya salido de este método pasará a ser un hilo muerto.
• La única forma de parar un hilo es hacer que salga del método run() de forma natural. Podremos conseguir esto
haciendo que se cumpla una condición de salida de run() (lógicamente, la condición que se nos ocurra dependerá del
tipo de programa que estemos haciendo). Las funciones para parar, pausar y reanudar hilos están desaprobadas en las
versiones actuales de Java.
• Mientras el hilo esté vivo, podrá encontrarse en dos estados: Ejecutable y No ejecutable. El hilo pasará de Ejecutable a
No ejecutable en los siguientes casos:
• Cuando se encuentre dormido por haberse llamado al método sleep(), permanecerá No ejecutable hasta
haber transcurrido el número de milisegundos especificados.
• Cuando se encuentre bloqueado en una llamada al método wait() esperando que otro hilo lo desbloquee llamando a
notify() o notifyAll(). Veremos cómo utilizar estos métodos más adelante.
• Cuando se encuentre bloqueado en una petición de E/S, hasta que se complete la operación de E/S.
8
CICLO DE VIDA Y PRIORIDADES
PRIORIDADES DE LOS HILOS
• Además, una propiedad importante de los hilos será su prioridad. Mientras el hilo se encuentre vivo, el
scheduler de la máquina virtual Java le asignará o lo sacará de la CPU, coordinando así el uso de la CPU
por parte de todos los hilos activos basándose en su prioridad.
• Se puede forzar la salida de un hilo de la CPU llamando a su método yield(). También se sacará un hilo
de la CPU cuando un hilo de mayor prioridad se haga Ejecutable, o cuando el tiempo que se le haya
asignado expire.
• Para cambiar la prioridad de un hilo se utiliza el método setPriority(), al que deberemos proporcionar
un valor de prioridad entre MIN_PRIORITY y MAX_PRIORITY (las constantes de prioridad disponibles
dentro de la clase Thread, de Java…consultar).
Virtualización
● La virtualización permite que una aplicación, y su
entorno completo, incluido el sistema operativo, se
ejecute simultáneamente con otras aplicaciones, pero
de forma muy independiente del hardware y las
plataformas subyacentes , lo que conduce a un alto
grado de portabilidad y flexibilidad.
● Además, la virtualización ayuda a aislar fallas
causadas por errores o problemas de seguridad.
https://www.ucursos.cl/ingenieria/2010/1/CC51S/1/material_docente
/bajar?id_material=271947
Actividad
• Observar el video:
https://youtu.be/j0RO-LX9rLA