ConcurrenteCasoPracticoTema2 / malacatonesUmbrella

0 stars 0 forks source link

diagrama de clases #1

Closed ffernandoss closed 1 week ago

ffernandoss commented 1 week ago

@startuml

package org.example { class Programa {

class SplashScreen {

class CSVLoader {

class Menu {

class Filtro {

class Graph {

class Data {

class ExecutorServiceManager {

class DataProcessor {

class SyncManager {

class CountDownLatch {

class CyclicBarrier {

class DatabaseService {

class Semaphore {

Programa --> SplashScreen Programa --> CSVLoader Programa --> Menu Menu --> Filtro Menu --> Graph Graph --> Data Programa --> ExecutorServiceManager ExecutorServiceManager --> DataProcessor DataProcessor --> Data DataProcessor --> SyncManager SyncManager --> CountDownLatch SyncManager --> CyclicBarrier Programa --> DatabaseService DataProcessor --> Semaphore }

@enduml

Descripción de Clases y Métodos Programa: iniciar(): Método para iniciar el programa y manejar el flujo principal. SplashScreen: mostrar(): Método para mostrar la pantalla de carga. ocultar(): Método para ocultar la pantalla de carga. CSVLoader: cargarDatosDesdeCSV(): Método para cargar datos desde un archivo CSV. Menu: mostrarOpciones(): Método para mostrar las opciones del menú. seleccionarFiltro(filtro: Filtro): Método para manejar la selección de un filtro por el usuario. Filtro: aplicarFiltro(data: Data): Método para aplicar un filtro a los datos. Graph: mostrarGrafica(data: Data): Método para mostrar una gráfica basada en los datos. actualizarGrafica(data: Data): Método para actualizar la gráfica con nuevos datos. Data: datosFiltrados: Atributo que almacena los datos filtrados. cargarDatos(): Método para cargar datos a partir de un origen. ExecutorServiceManager: ejecutarTareas(tareas: List): Método para ejecutar tareas en un pool de hilos. shutdown(): Método para cerrar el servicio de ejecución. DataProcessor: procesarDatos(data: Data): Método para procesar datos concurrentemente. SyncManager: await(): Método para sincronizar la ejecución de hilos. CountDownLatch: countDown(): Método para contar hacia abajo. await(): Método para esperar hasta que la cuenta llegue a cero. CyclicBarrier: await(): Método para esperar hasta que un número de hilos alcanzan un punto de sincronización. DatabaseService: connect(): Método para conectar a la base de datos. executeQuery(): Método para ejecutar consultas en la base de datos. Semaphore: acquire(): Método para adquirir un permiso. release(): Método para liberar un permiso. Solución propuesta: Configuración del Proyecto: Crear un proyecto Spring Boot con las configuraciones necesarias para la gestión de hilos y procesos. Añadir dependencias para MySQL, Spring Data JPA, y otras necesarias en pom.xml. Gestión de Flujos de Datos: Implementar clases para cada tipo de flujo de datos utilizando el principio de Inversión de Control (IoC). Configurar el uso de ExecutorService para gestionar pools de hilos y procesos. Procesamiento Concurrente: Utilizar https://github.com/async, ExecutorService y ForkJoinPool para manejar el procesamiento concurrente de los datos. Implementar servicios que procesen los datos de las muestras de manera eficiente y concurrente. Sincronización y Comunicación: Implementar técnicas de sincronización (usando synchronized, Locks, Semaphore) para evitar condiciones de carrera. Utilizar CountDownLatch y CyclicBarrier para coordinar la ejecución de hilos y asegurar la consistencia de los datos. Monitorización y Logs: Configurar herramientas de monitorización para supervisar el estado del sistema y los hilos en ejecución. Implementar logging eficiente para rastrear eventos y posibles errores en el procesamiento de datos.

clases

ffernandoss commented 1 week ago

.