Skip to content

DOC Version Control v3.0

Latest
Compare
Choose a tag to compare
@AntGalanin06 AntGalanin06 released this 19 May 19:49
· 2 commits to master since this release

📦 DOC Version Control Editor v3.0

ЛР №3 (Вариант 9) – «Основы многопоточности в Java»
Java 23 + Swing + Concurrency

Полноценный мониторинг многопоточной обработки «версионного редактора» на базе producer–consumer:
генерация запросов, буфер запросов, пул рабочих, сбор статистики и GUI-дешборды.


✨ Основные возможности

  • Генерация запросов
    ClientGenerator порождает пачки запросов (CHANGE_TEXT, UNDO, REDO, REVERT) с настраиваемой задержкой и джиттером
  • Потокобезопасная очередь
    RequestQueue на основе LinkedBlockingQueue<Request>
  • Обработка запросов
    WorkerPool с фиксированным числом потоков-воркеров (Worker), выполняющих команды над Document
  • Сбор метрик
    StatsAggregator, ClientStat, WorkerStat собирают задержки, количество и состояние (busy/idle)
  • Графический мониторинг
    SystemMonitorGUI с вкладками QueueDashboard (график и таблицы) и LogsPanel (реактивный лог)
  • Graceful shutdown
    – Poison-pill (SHUTDOWN) для корректного завершения воркеров и генераторов

🏗️ Архитектура и ключевые компоненты

Категория Тип Классы / Компоненты Роль
Generator Producer threads ClientGenerator, ClientConfigFactory, ClientConfig Порождают запросы с задержкой и джиттером
Queue Shared buffer RequestQueue Потокобезопасный буфер (LinkedBlockingQueue<Request>)
Worker Consumer threads Worker, WorkerPool Обрабатывают запросы, выполняют DocumentCommand
Engine Orchestrator ConcurrencyEngine Старт/стоп генераторов и пула воркеров
Statistics Aggregator StatsAggregator, ClientStat, WorkerStat Сбор и агрегация метрик: delay, throughput, busy/idle
GUI Monitoring UI SystemMonitorGUI, QueueDashboard, LogsPanel Визуализация очереди, таблиц, гистограмм и логов
Core domain GoF-паттерны & DTO Document, DocumentHistoryLogger, команды (ChangeText, Undo, Redo, Revert), декораторы Бизнес-логика версионного редактора, повторное использование

👀 Быстрый тур по интерфейсу

  1. Ввод параметров запуска
    • программа запрашивает значения для:
      • количества клиентов
      • количества потоков-исполнителей
      • ёмкости очереди
      • общего числа заявок

  1. Вкладка Queue
    • сверху — прогресс выполнения всех заявок
    • слева — таблица клиентов с количеством сгенерированных заявок и средней задержкой
    • справа — таблица исполнителей (воркеров): сколько обработано, текущий статус
    • справа внизу — список всех заявок по мере поступления

  1. Queue при полной загрузке
    • пример: 5 клиентов, 3 воркера, 120 заявок — все успешно выполнены

  1. Вкладка Logs
    • живая консоль с действиями — например, создание снимков состояния (CREATE core.memento)


🔧 Как расширять

Нужно Что добавить / изменить
Новый тип запроса (e.g. SAVE, LOAD) Добавить значение в RequestType и соответствующую ветку в Worker.run()
Альтернативная очередь Заменить RequestQueue на другую реализацию BlockingQueue<Request> (e.g. PriorityBlockingQueue)
Доп. статистика Расширить StatsAggregator и GUI (новые колонки/графики)
Хранение статистики в БД Имплементировать StatsAggregator через JDBC / JPA вместо in-mem
Фильтрация и поиск в GUI Добавить панели фильтрации по клиентам/воркерам, поиск по ID, диапазон времени
Другой алгоритм генерации Создать альтернативную версию ClientGenerator с новым паттерном burst/delay

🧩 UML-диаграмма архитектуры проекта


📄 Отчёт по выполненной лабораторной работе

Полный текстовый отчёт оформлен в соответствии с требованиями.
Содержит описание задания, архитектуры, компонентов многопоточной системы и их взаимодействия.
Включает схемы потоков, описание критических секций, используемые инструменты синхронизации и способы их защиты.
Приведены скриншоты интерфейса (SystemMonitorGUI), вкладок Queue и Logs, а также полная UML-диаграмма проекта.
Весь исходный код представлен в формате Consolas 10, без комментариев, с разбивкой по файлам и пакетам.

📥 Скачать отчёт (DOCX)