From caffba83ec9aa2c3b8a9d1a052213604dfa959b8 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Wed, 9 Oct 2024 23:28:09 +0300 Subject: [PATCH] Deadlock.md --- dev/fundamental/Deadlock.md | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 dev/fundamental/Deadlock.md diff --git a/dev/fundamental/Deadlock.md b/dev/fundamental/Deadlock.md new file mode 100644 index 00000000..f9c4ce7b --- /dev/null +++ b/dev/fundamental/Deadlock.md @@ -0,0 +1,43 @@ +--- +aliases: +tags: + - maturity/🌱 +date: + - - 2024-06-20 +zero-link: +parents: +linked: +--- +Дедлок — это ситуация, при которой два или более [[Поток процесса ОС|потока]] блокируют друг друга, ожидая освобождения ресурсов, которые удерживаются другим потоком. Чтобы понять это, нужно рассмотреть, что такое «блокировки» и «ресурсы». + +[[Блокировка]] — это способ «захвата» ресурса, чтобы предотвратить доступ других потоков к этому ресурсу до завершения текущей операции. + +Ресурс может быть любой частью программы, к которой требуется эксклюзивный доступ: файл, переменная, раздел памяти или даже объект базы данных. + +Простой пример дедлока: +- Поток A захватывает ресурс 1 (например, файл) и пытается получить доступ к ресурсу 2 (например, переменной), но этот ресурс уже захвачен потоком B. +- Поток B захватывает ресурс 2 и пытается получить доступ к ресурсу 1, который удерживается потоком A. + +В результате оба потока зависают — каждый ждёт освобождения ресурса, который удерживает другой поток. Это называется дедлоком, и программа перестаёт выполнять свои задачи, так как ни один из потоков не может продолжить работу. + +**Советы:** +- Делать транзакции короче. +- Выполнить повторно откатившуюся транзакцию + +**Что реально поможет:** +- Разделить потоки чтения и записи: [CQRS](CQRS.md) +- Использовать материализованные view. +- Изменить порядок блокировок ресурсов. Если в разных операциях блокируется определенный набор ресурсов, то блокироваться первым должен всегда один и тот же ресурс +- Пересмотреть [Уровни изоляций транзакций БД](Уровни%20изоляций%20транзакций%20БД.md) +- Сразу использовать Exclusive lock. Но это сильно может сказаться на производительности. +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Разработка|00 Разработка]] +**Родитель**:: [[Multithreading|Многопоточность]] +**Источник**:: +**Автор**:: +**Создана**:: [[2024-06-20]] +### Дополнительные материалы +- +### Дочерние заметки +