📌 Starvation
Starvation — ситуация в многозадачной системе, при которой один или несколько потоков/процессов постоянно откладываются в доступе к ресурсу из-за приоритета других. Поток «голодает», не получая CPU, Mutex или другие ресурсы.
🧠 Как работает
Голодание возникает, когда:
- Система планирования всегда выбирает другие (более приоритетные) задачи
- Алгоритм захвата ресурсов несправедлив (например, без очереди FIFO)
- Один поток постоянно «выталкивается» из конкурентной среды
Отличие от Deadlock — starvation не означает полной остановки всех потоков, только одного или группы.
Причины:
- Priority Scheduling без инверсии или aging
- Неочередные Mutex или Semaphore
- Атомарные операции без fairness (напр. Spinlock)
- Busy waiting без выхода
⚙️ Где возникает
Контекст | Описание |
---|---|
Realtime System | Низкоприоритетные задачи не исполняются |
Mutex / Lock | Нет справедливого порядка ожидания |
Kernel Scheduling | Ядро не даёт квант времени слабым потокам |
Database | Одна транзакция не получает доступ к строкам |
✅ Преимущества
(Отсутствуют — это дефект системы.)
❌ Недостатки
- Зависание процессов без блокировок
- Снижение производительности и предсказуемости
- Невозможность гарантии выполнения
- Особенно критично в RTOS и серверных приложениях
🛡 Методы предотвращения
- Priority Inheritance
- Введение aging (повышение приоритета со временем)
- Использование справедливых очередей (Fair Mutex, Ticket Lock)
- Таймауты ожидания или отложенное повторение