ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Informe de Laboratorio - Threads


Enviado por   •  1 de Octubre de 2022  •  Informes  •  1.588 Palabras (7 Páginas)  •  42 Visitas

Página 1 de 7

[pic 1]

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS

ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

[pic 2]

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación

Aprobación:  2022/03/01

Código: GUIA-PRLE-001

Página:

INFORME DE LABORATORIO

INFORMACIÓN BÁSICA

ASIGNATURA:

Sistemas Distribuidos

TÍTULO DE LA PRÁCTICA:

Los hilos (Threads)

NÚMERO DE PRÁCTICA:

1

AÑO LECTIVO:

2022

NRO. SEMESTRE:

2022A

FECHA DE PRESENTACIÓN

03/05/2022

HORA DE PRESENTACIÓN

INTEGRANTE (s):  GRUPO “5”

NOTA:

DOCENTE(s): Molina Barriga, Maribel

SOLUCIÓN Y RESULTADOS

  1. SOLUCIÓN DE EJERCICIOS/PROBLEMAS
  • Implementar, ejecutar y probar el código de los anexos 1 al 4, de manera adecuada.
  • Ejemplo 1

Este ejemplo muestra la demostración de cómo funciona la programación concurrente, con carreras de hilos y procesos. Se realizan 4 carreras con 4 hilos(corredores).

Codigo en Java:

[pic 3]

[pic 4]

[pic 5]

Resultado de la ejecución:

[pic 6]

[pic 7]

  • Ejemplo 2

En este ejemplo hay un productor, el cual genera un entero entre 0 y 9, lo almacena en un objeto de tipo CubbyHole, e imprime el número generado. Para hacer más interesante el problema de la sincronización, el productor duerme durante un tiempo aleatorio entre 0 y 100 milisegundos antes de repetir el ciclo de generación de números.

Clase Consumidor

[pic 8]

Clase Productor

[pic 9]

Clase CubbyHole

[pic 10]

Clase Principal

[pic 11]

Por último, tenemos los resultados de la ejecución del programa:

[pic 12]

  • Ejemplo 3

En este ejemplo se utilizan nuevas técnicas de sincronización con la creación de la clase “CubbyHole”. Esta clase se puede ver a continuación:

[pic 13]

Finalmente, se muestra la ejecución del programa con esta clase:

[pic 14]

  • Ejemplo 4

En este ejemplo se implementa la clase Animación.java que consta de los siguientes metodos:

  • init()
  • paint()
  • start()
  • run()

Ejecución del Applet

[pic 15]

  • Evaluar resultados obtenidos.

Para el ejemplo 1, las carreras de los 4 corredores, en la cual la distancia que cada uno avanza se da de manera aleatoria y estos resultados se van guardando. Se realizan 4 carreras, una a continuación de la otra, para ello cada hilo le pasa su contador al siguiente. Al finalizar cada corredor, se mandan mensajes por consola, estos valores son almacenados.

Para el ejemplo 2, tanto consumidor como productor trabajan con objetos, como el CubbyHole que son compartidos entre dos threads y cuyo acceso debe ser sincronizado son llamados condiciones variables. El lenguaje Java permite sincronizar threads alrededor de una condición variable mediante el uso de monitores. Los monitores previenen que dos threads acceden simultáneamente a la misma variable.los métodos notify() y wait() del objeto para coordinar la actividad de los dos threads y también para asegurarse de que cada valor situado en él por el Productor es recuperado una vez y al igual que por el Consumidor.

Para el ejemplo 3, como CubbyHole tiene dos métodos sincronizados, java proporciona un único monitor para cada ejemplar de CubbyHole. Siempre que el control entra en un método sincronizado, el thread que ha llamado el método adquiere el monitor del objeto cuyo método ha sido llamado. Entonces, otros threads no pueden llamar a un método sincronizado del mismo objeto hasta que el monitor sea liberado.

Para el ejemplo 4, el método run() de la aplicación se encarga de la creación cada hilo, el cual se representa sobre una Applet que  se ejecuta con ayuda del appletviewer que está disponible hasta el jdk 8.

[pic 16]

  • Escriba un reporte sobre las tareas realizadas y resultados.

Para el ejemplo 1, se tomó en consideración utilizar un código fuente que haga una simulación con la carrera de hilos para luego probar y evaluar el control de hilos por medio de algunos métodos, ya que el código proporcionado no podía ser probado porque no contiene la documentación de la clase Contar. Para ello el programa utiliza pequeñas ventanas con los valores de cada carrera y también la cantidad de sprints de cada corredor. Se notifica por consola cuando cada corredor llega a la meta (50m), al final de la ejecución se muestra en consola el reporte de las carreras.

Para el ejemplo 2, en este ejemplo tanto la clase Consumidor y Productor requerían utilizar la clase CubbyHole del ejemplo 3, para dicha interacción o sincronización se utilizó los métodos put() y get(). Por último se creó una clase para probar dichas clases y observar sus resultados, de esta manera los hilos concurrentes comparten datos y consideran el estado y actividad de otros hilos.

Para el ejemplo 3, la clase CubbyHole tiene dos variables privadas: contents, qué es el contenido actual de CubbyHole, y la variable booleana available, que indica si se puede recuperar el contenido de CubbyHole. Cuando available es verdadera indica que el Productor ha puesto un nuevo valor en CubbyHole y que el Consumidor todavía no la ha consumido. El Consumidor sólo puede consumir el valor de CubbyHole cuando available es verdadera.

Para el ejemplo 4, lo primero que se realizó fue descargar el JDK 8 para la ejecución de los applets porque estos ya no tienen soporte desde esa versión de java, el código proporcionado se pasó al IDE java en donde la ejecución se realiza como Applet, con la ejecución del programa se genera el archivo.class correspondiente, este archivo Animacion.class es llamado desde el archivo index.html y finalmente se ejecuta este archivo con appletviewer.

[pic 17]

  1. SOLUCIÓN DEL CUESTIONARIO
  1. ¿Qué es multihilo?

Es el término utilizado para ejecutar múltiples hilos dentro de un solo proceso con el fin de ejecutar múltiples tareas al mismo tiempo. El multihilo se puede hacer usando hilos de CPU a través del sistema operativo o usando la capacidad del lenguaje de programación para ejecutar múltiples hilos. Actualmente, la mayoría de las aplicaciones utilizan el multihilo para proporcionar una mejor experiencia al usuario.

  1. ¿Cómo están compuestos los hilos?

Los hilos están compuestos por estados como se puede ver a continuación:

[pic 18]

El comportamiento de un hilo depende del estado en que se encuentre, este estado define su modo de operación actual. Los estados en los que puede estar un hilo Java son:

  • New
  • Running
  • Not running
  • Dead
  1. ¿Cuál es la diferencia entre hilos y procesos?
  • El hilo es la ejecución de un programa impulsado por el entorno de un proceso, mientras que el proceso es la ejecución del programa.
  • Los hilos comparten memoria y recursos, mientras que los procesos no.
  • Una de las grandes diferencias entre procesos e hilos es que el primero conlleva gran cantidad de información de estados. Además, los hilos pueden comunicarse.
  • El tiempo que requiere el sistema operativo para realizar un cambio de un proceso a otro es muy elevado, en los hilos este tiempo es despreciable, pues todos pertenecen al mismo proceso y además comparten la memoria.
  1. ¿Qué permiten hacer los hilos en un sistema?

Los hilos en un sistema permiten a una aplicación realizar varias tareas a la vez concurrentemente, los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autentificación. Esta acción permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.

Los hilos poseen un estado de ejecución y pueden sincronizarse entre ellos para evitar problemas de compartimiento de recursos. Generalmente, cada hilo tiene una tarea específica y determinada, como forma de aumentar la eficiencia del uso del procesador.

  1. ¿Cuáles son las aplicaciones de los hilos?

Los hilos los podemos utilizar cuando en nuestra aplicación tenemos:

  • Operaciones asíncronas
  • Operaciones que se pueden paralelizar
  • Operaciones continuas en segundo plano

        Este tipo de operaciones podemos encontrar en:

  • navegadores web
  • servidores web replicados
  1. Realice un cuadro comparativo de ventajas y desventajas del uso de hilos

Ventajas

Desventajas

  • Respuesta: el tiempo de respuesta mejora, ya que el programa puede continuar ejecutándose, aunque parte de él esté bloqueado.
  • Compartir recursos: los hilos comparten la memoria y los recursos del proceso al que pertenecen, por lo que se puede tener varios hilos de ejecución dentro del mismo espacio de direcciones.
  • Economía: Es más fácil la creación, cambio de contexto y gestión de hilos que de procesos
  • Utilización múltiples CPUs: permite que hilos de un mismo proceso se ejecute en diferentes CPUs a la vez.
  • Inconsistencia de datos debido a las modificaciones inadvertidas en los diferentes hilos.
  • Algunas de las librerías que gestionan los hilos en los diferentes lenguajes que existen pueden tener huecos de seguridad.
  • Falta de robustez en la aplicación porque si un hilo falla, toda la aplicación fallará.

  1. CONCLUSIONES

El lenguaje Java y el sistema de ejecución soportan la sincronización de threads mediante el uso de monitores. En general, un monitor está asociado con un objeto específico (una condición variable) y funciona como un bloqueo para ese dato. Cuando un thread mantiene el monitor para algún dato del objeto, los otros threads están bloqueados y no pueden ni inspeccionar ni modificar el dato.

Asimismo, los segmentos de código dentro del programa que acceden al mismo dato dentro de threads concurrentes separados son conocidos como secciones críticas. En el lenguaje Java, se pueden marcar las secciones críticas del programa con la palabra clave synchronized.

La utilidad de la programación multihilos resulta evidente. Por ejemplo, un navegador Web puede descargar un archivo de un sitio, y acceder a otro sitio al mismo tiempo. Si el navegador puede realizar simultáneamente dos tareas, no tendrá que esperar hasta que el archivo haya terminado de descargarse para poder navegar a otro sitio.

En conclusión la programación multihilo está presente en la mayor parte de las aplicaciones informáticas que usamos cotidianamente sin importar el lenguaje en que se desenvuelvan, el concepto de Thread o Hilo seguirá siendo el mismo.

...

Descargar como (para miembros actualizados)  txt (10.7 Kb)   pdf (1.9 Mb)   docx (1.9 Mb)  
Leer 6 páginas más »
Disponible sólo en Clubensayos.com