❌ Deadlock и Livelock: чем опасны и как избежать.
⚠️ Deadlock — это тупик.
Когда два потока блокируют друг друга, бесконечно ожидая освобождения ресурсов, которые каждый из них удерживает.
♣️ Пример:
Поток 1: держит доступ к базе и ждёт сетевой ответ.
Поток 2: держит сеть и ждёт доступ к базе.
✅ Как предотвратить:
🔹 Устанавливайте строгий порядок блокировки ресурсов.
🔹 Используйте асинхронные вызовы вместо синхронных.
⚠️ Livelock — это бег на месте.
Ситуация, при которой два или более потока не могут выполнять полезной работы по причине борьбы за общий ресурс.
♣️ Пример:
Два потока постоянно меняют флаг "готовности", но реальной работы не происходит.
✅ Как исправить:
🔹 Добавляйте случайные задержки между повторными попытками.
🔹 Используйте семафоры для контроля доступа.
🔹 Используйте барьеры.
💡 Главное отличие:
Deadlock — полная остановка, Livelock — активность без прогресса.
🔢 В Swift особенно актуально при работе с:
🔸 GCD
🔸 OperationQueue
🔸 Новыми Actor-ами
➡️ Подписаться на канал
Мобильный трудоголик
Post #65
689
- 👍 24
- ✍ 11
- 🔥 4