Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C++ Parallel & Distributed Computing Systems

C++ Multi-threading Sockets Performance

Комплексний курс лабораторних робіт і практичних досліджень у галузі паралельних, неблокуючих та розподілених систем на C++17. Репозиторій охоплює теми від низькорівневого керування потоками виконання та апаратної атомарності до побудови власних пулів потоків, кастомних TCP-протоколів і високонавантажених HTTP-серверів.


Структура репозиторію та огляд завдань

  • Тема: Освоєння базових операцій із std::thread, std::async та неблокуючої паралелізації обчислень.
  • Ключові реалізації:
    • Реалізація класу ScopedTimer на основі std::chrono для точного профайлінгу.
    • Оптимізоване представлення матриць у виглядi плоских масивів для збереження кеш-локальності та уникнення False Sharing.
    • Аналіз залежності швидкодії від кількості потоків ($3 \dots 72$) та розмірності даних.
  • Висновки: Виявлено ефект "Стіни пам'яті" (Memory Wall) — при великих обсягах даних пропускна здатність шини RAM стає головним обмежувачем швидкодії, ніж кількість ядер CPU.

  • Тема: Дослідження атомарності, апаратних інструкцій (CMPXCHG) та розробка алгоритмів без м'ютексів.
  • Ключові реалізації:
    • Порівняльний аналіз трьох підходів: послідовного, блокуючого (std::mutex + std::lock_guard) та неблокуючого (std::atomic, compare_exchange_weak / CAS).
    • Атомарний розрахунок узагальнених статистик на масивах розміром $10^7+$ елементів.
  • Висновки: Доведено перевагу Lock-Free підходу на великих даних завдяки уникненню перемикання контексту ОС та роботі безпосередньо на рівні процесорних інструкцій.

  • Тема: Проєктування шаблону "Пул потоків" із підтримкою обмеженої черги та примітивів синхронізації.
  • Ключові реалізації:
    • Власний ThreadPool із 6 робочими потоками та обмеженою чергою на 20 задач (зі стратегією відкидання задач при переповненні).
    • Синхронізація за допомогою std::mutex, std::shared_mutex (Read-Write Lock) та std::condition_variable.
    • Реалізація функцій паузи (pause()), відновлення (resume()), плавного та миттєвого завершення (terminate()), а також трекінгу статусів задач за їх ID.
    • Вбудована система збору метрик профайлінгу (час простою воркерів, час насичення черги, кількість відхилених задач).

  • Тема: Організація міжпроцесної взаємодії (IPC) та створення розподіленої клієнт-серверної системи.
  • Ключові реалізації:
    • Багатопотоковий сервер та синхронний клієнт на низькорівневих сокетах WinSock/POSIX (TCP/IP).
    • Кастомний бінарний протокол прикладного рівня (CMD_CONFIG, CMD_START, CMD_STATUS, CMD_GET_RESULT).
    • Конвертація порядку байтів (Little-Endian $\leftrightarrow$ Big-Endian / Network Byte Order) та порційне читання/запис для обробки фрагментації TCP-пакетів.
    • Винесення математичних обчислень у фоновий потік сервера для збереження чутливості до мережевих запитів.

  • Тема: Реалізація HTTP 1.1 веб-сервера на транспортному рівні (OSI Level 4) та навантажувальне тестування.
  • Ключові реалізації:
    • Обробка HTTP GET-запитів, хостинг статичних сторінок та коректна генерація HTTP 404 Not Found відповідей.
    • Багатопотокова обробка за схемою Thread-per-connection.
    • Стрес-тестування системи за допомогою Locust (до 10,000 віртуальних користувачів).
  • Висновки: Визначено точку відмови сервера (при ~7200 паралельних сесіях) та практично продемонстровано обмеження архітектури Thread-per-connection у високонавантажених системах.

Стек технологій та інструментів

  • Мова програмування: C++17
  • Паралелізм: std::thread, std::atomic, std::future, std::condition_variable, std::shared_mutex
  • Мережа: TCP Sockets (WinSock2 / POSIX)
  • Тестування та Профайлінг: Locust, std::chrono, Custom Benchmarking Frameworks
  • Середовище: MS Visual Studio 2022 / VS Code (Windows & WSL Linux)

About

Advanced C++ Parallel Computing course projects: multithreading, atomic lock-free algorithms, custom thread pool, IPC TCP sockets, and HTTP server with Locust load testing.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages