Вопрос проверяет понимание проблем планирования потоков и последствий неправильной приоритизации задач.
Starvation — это ситуация, когда задача или поток долгое время не получает ресурсы для выполнения. При этом система в целом продолжает работать, но конкретная задача «голодает». Чаще всего это происходит из-за неправильных приоритетов или постоянной загрузки более приоритетными задачами. В отличие от deadlock, выполнение не останавливается полностью. Проблема может быть незаметной, но сильно влиять на поведение приложения.
Starvation относится к классу логических проблем многопоточности, связанных с распределением ресурсов.
Starvation — это состояние, при котором поток или задача не получает доступ к необходимым ресурсам в течение длительного времени из-за конкуренции с другими задачами.
Перед перечислением важно понимать, что starvation — это проблема политики планирования, а не блокировки.
В системе есть задачи с разным приоритетом
Высокоприоритетные задачи постоянно занимают ресурсы
Низкоприоритетные задачи откладываются снова и снова
В итоге они почти не выполняются или не выполняются вовсе
Типичный сценарий — неправильный выбор QoS.
DispatchQueue.global(qos: .userInteractive).async {
// тяжёлая фоновая работа
}
Если такие задачи запускаются часто, задачи с utility или background могут практически не получать процессорное время.
Deadlock: система остановилась полностью
Starvation: система работает, но несправедливо
Корректно выбирать QoS
Не выполнять тяжёлую работу с высоким приоритетом
Дробить длительные задачи
Использовать справедливые очереди
Starvation — коварная проблема, потому что приложение формально «работает». Правильная приоритизация и архитектура помогают её избежать.