Комплексний курс лабораторних робіт і практичних досліджень у галузі паралельних, неблокуючих та розподілених систем на 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)