This commit is contained in:
lovinervy committed 2026-10-07 13:06:47 +05:00
commit c394677d07
59 files changed
+5149

No files matched your search

+86
View File
@@ -0,0 +1,86 @@
# Технология параллельного программирования (Python)
Курс лабораторных работ для направления «Прикладная математика и информатика».
## Цель курса
Научиться осознанно выбирать модель исполнения для конкретной задачи:
| Модель | Когда помогает | Инструменты |
|---|---|---|
| Последовательный код | базовая линия | stdlib |
| Потоки (threads) | задачи I/O-bound | `threading`, `concurrent.futures` |
| Процессы (processes) | задачи CPU-bound | `multiprocessing` |
| Асинхронность | много I/O-операций, кооперативность | `asyncio` |
| Распределённые вычисления | несколько машин / узлов | `mpi4py` (MS-MPI) |
Отдельное внимание: **GIL** — почему потоки в CPython не ускоряют чистый Python-код,
и как это обходить.
## Состав работ
| № | Папка | Тема |
|---|---|---|
| 0 | `lab00_intro/` | Окружение: Python, venv, VS Code, проверка готовности |
| 1 | `lab01_sequential/` | Последовательное вычисление, профилирование, CPU-bound vs I/O-bound |
| 2 | `lab02_threads/` | Многопоточность на I/O-bound задачах, `ThreadPoolExecutor` |
| 3 | `lab03_gil/` | GIL: почему потоки не ускоряют CPU-код; `hashlib` как исключение |
| 4 | `lab04_multiprocessing/` | Процессы, `Pool`, накладные расходы, spawn на Windows |
| 5 | `lab05_sync/` | Гонки данных, `Lock`, `Semaphore`, `Event`, producer–consumer |
| 6 | `lab06_asyncio/` | `async/await`, event loop, `gather`, семафор, сравнение с потоками |
| 7 | `lab07_comparison/` | Одна задача × 4 подхода, закон Амдала, итоговые графики |
| 8 | `lab08_mpi/` | Распределённые вычисления, MPI (по указанию преподавателя) |
## Варианты
Каждый студент выполняет **свой вариант** — см. `common/варианты.md`
(20 вариантов: CPU-задача + параметры + I/O-нагрузка). Ядра всех задач уже
реализованы в `common/tasks.py` — смысл лабораторных именно в *организации
вычислений и замерах*, а не в переписывании алгоритмов.
## Установка (Windows, 10/11)
1. Python 3.10+ с python.org (галочка **Add python.exe to PATH**).
2. Открыть папку курса в VS Code (расширение Python).
3. В терминале VS Code:
```bat
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python lab00_intro\check_env.py
```
Если вывод кириллицы «кракозябрами» — выполните `chcp 65001`.
На macOS/Linux всё то же самое, кроме `activate` (там `source .venv/bin/activate`).
## Как сдавать
- Код: `labXX_.../solution.py` (заполняются заготовки, интерфейсы менять нельзя —
по ним работают автотесты).
- Отчёт: по шаблону `common/шаблон_отчёта.md` — таблицы замеров, графики, выводы.
- Самопроверка перед сдачей: `python -m pytest tests/ -k labXX` из корня курса.
- Чек-лист: `common/чек-лист_сдачи.md`. Типичные ошибки: `common/типичные_ошибки.md`.
## Структура репозитория
```
common/ банк задач, варианты, утилиты замеров, шаблоны
lab00_intro/ ... lab08_mpi/
методичка.md теория + задание + контрольные вопросы + критерии
examples/ запускаемые демонстрации
solution.py заготовка решения (заполняет студент)
tests/ автотесты pytest (самопроверка студента, проверка преподавателя)
instructor_solutions/ эталонные решения (только для преподавателя)
```
## Запуск примеров и решений
Все команды выполняются **из корня курса**:
```bat
python lab01_sequential\examples\01_perf_counter_demo.py
python lab01_sequential\solution.py
python -m pytest tests\ -v
```