Сигналы, IPC, управление памятью
Зачем это изучать
Сигналы, IPC и память — это основа надежных системных и серверных приложений. Ошибки в этих зонах дают самые неприятные последствия: зависания, гонки, утечки памяти и трудноуловимые падения.
Лабораторная построена как три связанных блока.
Блок 1. Сигналы (Signals)
Ключевые понятия
- Сигнал — асинхронное уведомление процессу о событии.
- Обработчик сигнала — функция, вызываемая при получении сигнала.
- Маскирование сигналов — временное блокирование доставки выбранных сигналов.
Практика
- Запустите долгоживущий процесс.
- Добавьте обработчики, например для:
- завершения,
- конфигурационного reload,
- пользовательского сигнала.
- Отправьте сигналы из другого процесса и зафиксируйте поведение.
Проверки
- корректно ли освобождаются ресурсы при завершении;
- не теряются ли данные при остановке;
- не используется ли небезопасный код внутри signal-handler.
Блок 2. IPC (Inter-Process Communication)
Что сравнить
- Pipe — простой поток байтов между процессами.
- Unix domain socket / Named pipe — двусторонняя коммуникация, ближе к сокетной модели.
- Shared memory — быстрый обмен через общую область памяти (требует синхронизации).
Практика
- Реализуйте обмен сообщениями через pipe.
- Добавьте вариант через shared memory.
- Прогоните одинаковый тест (например, 100k сообщений фиксированного размера).
Что измерять
- throughput,
- latency,
- процент потерянных/битых сообщений,
- сложность кода синхронизации.
Вывод обычно такой: shared memory быстрее, но сложнее и рискованнее без аккуратной синхронизации.
Блок 3. Управление памятью
Что проверить
- Корректные пары выделения/освобождения (
malloc/free,new/delete). - Поведение при фрагментации.
- Влияние размера и времени жизни объектов.
Практика
- Напишите нагрузочный сценарий с множеством выделений разных размеров.
- Добавьте намеренную утечку и поймайте ее профилировщиком.
- Исправьте утечку и повторите прогон.
Дополнительно
Если платформа позволяет, сравните общий аллокатор со специализированным (pool/slab-like подходом) для однотипных объектов.
Единый пошаговый план выполнения лабораторной
- Опишите гипотезы по каждому блоку.
- Подготовьте минимально воспроизводимое окружение.
- Запустите baseline.
- Измените один фактор.
- Повторите замер и сравните.
- Зафиксируйте инженерные выводы.
Что должно быть в финальном отчете
- Сценарии отправки сигналов и реакция процесса.
- Таблица сравнения IPC-механизмов.
- Результаты анализа памяти (до/после исправлений).
- Краткий раздел "риски в продакшене и как их снизить".
Частые ошибки
- Выполнять сложную логику прямо в обработчике сигнала.
- Использовать shared memory без протокола синхронизации.
- Делать выводы по одному замеру.
- Не проверять cleanup в аварийных сценариях.
Практический результат
После выполнения вы сможете проектировать межпроцессное взаимодействие и управление ресурсами осознанно: понимать, где важнее скорость, где важнее простота, а где критичнее надежное восстановление после ошибок.