Студентський науковий гурток «Майстерня паралельного програмування»

Наукові керівники:
Гринченко Марина Анатоліївна — завідувачка кафедри управління проєктами в інформаційних технологіях
Лисенко Антон Олександрович — старший викладач кафедри управління проєктами в інформаційних технологіях
Члени гуртка: здобувачі 2–6 курсів
Режим роботи гуртка: онлайн-зустрічі у Teams (регулярність і час — за узгодженим графіком).

Сучасні ІТ-системи майже ніколи не працюють «в один потік». Навіть найпростіші застосунки сьогодні взаємодіють із мережею, диском, графічним інтерфейсом, сервісами й іншими процесами — а отже потребують паралельності, асинхронності та грамотного керування ресурсами. Саме тому ми створили науковий гурток «Майстерня паралельного програмування», щоб системно й практично розбирати те, що у реальних проєктах визначає надійність і продуктивність: багатопотоковість, синхронізацію та високонавантажені сценарії.

Мета студентського наукового гуртка:
1. системно й практично розібрати паралельність та асинхронність у програмуванні, керування ресурсами у реальних високонавантажених сценаріях;
2. навчити учасників бачити проблеми паралельності у коді та коректно проєктувати рішення;
3. сформувати культуру роботи з продуктивністю: профілювати й оптимізовувати на основі вимірювань;
4. розвивати інженерне мислення, уважність до деталей.

Основні завдання студентського наукового гуртка:
1. поглиблене вивчення багатопотоковості та взаємодії між процесами, життєвого циклу потоку;
2. опанування примітивів синхронізації, алгоритмів синхронізації, обробки сигналів і типових помилок у багатопотоковому коді;
3. розуміння моделі пам’яті та бар’єрів пам’яті;
4. практика профілювання та оптимізації (пошук “вузьких місць”);
5. знайомство з концепціями побудови високонавантажених систем (ABA, TLS, лінійність, lock-free, RCU, async I/O, корутини, транзакційна пам’ять).
6. вивчення механізмів керування потоками та процесами в ОС: планування (scheduling), пріоритети, контекстні перемикання, таймери, взаємодія між процесами (IPC) та вплив ОС на продуктивність і латентність;
7. огляд принципів побудови систем реального часу: детермінізм, дедлайни, пріоритетне планування, інверсія пріоритетів і базові практики проєктування під RTOS-подібні вимоги.

Реалізація завдань наукового гуртка здійснюється у наступних формах наукової діяльності:
1. огляди ключових ідей та обговорення;
2. розбір прикладів “з життя” та обговорення рішень;
3. практичні завдання, міні-проєкти, оптимізація й аналіз продуктивності.

Тематика наукових досліджень:
• багатопотоковість та взаємодія між процесами;
• створення та завершення потоків (життєвий цикл потоку);
• примітиви синхронізації, обробка сигналів, алгоритми синхронізації, типові помилки;
• модель пам’яті та бар’єри пам’яті;
• профілювання та оптимізація продуктивності;
• ABA-проблема, TLS, лінійність;
• черги Майкла–Скотта, RCU;
• асинхронний ввід/вивід та корутини;
• транзакційна пам’ять;
• керування потоками і процесами в ОС: планувальник, пріоритети, політики scheduling, контекстні перемикання, IPC;
• латентність vs пропускна здатність: що дає ОС, які рішення шкодять продуктивності, як це вимірювати (профілювання, трасування);
• основи RTOS-подібних систем: детермінізм, дедлайни, пріоритетне планування, інверсія пріоритетів, таймери, взаємодія задач;
• патерни проєктування для систем із жорсткими/м’якими часовими вимогами.

Фокус гуртка паралельне програмування як інструмент створення швидких, стабільних і масштабованих рішень. Серед головних тем — багатопотоковість і міжпроцесна взаємодія, життєвий цикл потоку (створення та завершення), а також примітиви синхронізації й обробка сигналів. Ми розбираємо, як забезпечити коректний доступ до спільних ресурсів, чому «працює на моєму ПК» не означає «працює завжди», і як виявляти та запобігати типовим помилкам у багатопоточному коді.

Окрему увагу приділяємо фундаменту, який часто недооцінюють: моделі пам’яті та бар’єрам пам’яті, а також практиці профілювання — тобто вимірюванню продуктивності та пошуку реальних «вузьких місць». На цьому рівні у студентів з’являється якісно інше розуміння систем: чому одна і та сама програма може поводитися по-різному на різних процесорах, як виникають «привиди» гонок даних, і чому оптимізація без вимірювань — це здогадки.

Також ми вивчаємо складніші та більш «дорослі» концепції: ABA-проблему, TLS (thread-local storage), лінійність, структури на кшталт черг Майкла—Скотта та механізм RCU (Read-Copy-Update). Це теми, з якими стикаються інженери у високонавантажених системах, драйверах, runtime-середовищах та інфраструктурних сервісах — і саме вони відділяють «код, що запускається» від «коду, що витримує реальність».

Ще один важливий напрям — асинхронний ввід/вивід та корутини: як будувати реактивні системи, які не блокуються очікуванням мережі чи диску, і як зберігати читабельність коду при асинхронній логіці. Окремо торкаємось і концепції транзакційної пам’яті як спроби зробити багатопотоковість простішою за рахунок контрольованого доступу до спільних даних.

Формат роботи гуртка — це поєднання оглядів ключових ідей, розбору прикладів «з життя», практичних завдань і обговорень рішень. Наша мета — щоб учасники гуртка не просто знали терміни, а могли:
• бачити проблеми паралельності в чужому й власному коді;
• обирати адекватні примітиви синхронізації та алгоритми;
• пояснювати свої рішення (а це критично і для командної роботи, і для співбесід);
• профілювати та оптимізувати продуктивність на основі вимірювань.

«Майстерня паралельного програмування» — це середовище, де складні теми стають зрозумілими через практику, а студенти отримують те, що складно здобути лише з підручників: інженерне мислення, уважність до деталей і культуру роботи з продуктивністю та надійністю. Ми запрошуємо всіх, кому цікаво не просто писати код, а будувати системи, які стабільно працюють у реальних умовах.