Livelock: що таке, наприклад, різниця з Deadlock

⚡ Розумний підсумок

Livelock — це ситуація паралельного виконання, коли процеси постійно змінюють свої стани у відповідь один на одного, але не досягають реального прогресу, залишаючись активними та споживаючи цикли процесора, так і не виконавши своїх завдань і не заблокувавшись.

  • 🔁 Визначення: Взаємоблокування (Livelock) виникає, коли процеси постійно змінюють стан, щоб пристосуватися один до одного, але ніколи не просуваються, на відміну від заморожених процесів у глухому куті.
  • 🚶 приклад: Двоє людей крокуютьping поруч у коридорі, щоб пропустити один одного, ілюструють живий захват, безперервний рух, але ніколи не перетинаючи його.
  • 🧮 Причина: Повторне опитування та повторні спроби блокувань, обмежених скінченними слотами таблиці процесів, призводить до активного блокування процесів без блокування жодного з них.
  • 🇧🇷 Порівняння: Взаємоблокування заморожує процеси, голодування відмовляє у ресурсах на невизначений термін, а активне блокування утримує процеси зайнятими без подальшого просування.
  • 🛡️ профілактика: Рандомізоване відкладення спроб, обмеження повторних спроб та порядок пріоритетів порушують симетричні повторні спроби, які створюють блокування в режимі реального часу.
  • 🤖 Кут штучного інтелекту: Машинне навчання позначає шаблони процесора, що не виконуються, а Copilot допомагає писати код для відстрочки виконання та упорядкування блокувань, який дозволяє уникнути блокування в реальному часі.

Живий замок у Operating System

Що таке Livelock?

A динамічний тупик це ситуація, коли запит на ексклюзивне блокування неодноразово відхиляється, оскільки багато перекриваютьсяping Спільні блокування постійно заважають одне одному. Процеси постійно змінюють свій статус, що заважає їм виконати завдання.

Приклади Livelock

Приклад 1:

Найпростіший приклад Лайвлока – це двоє людей, які зустрічаються віч-на-віч у коридорі, і обидва розступаються, щоб пропустити іншого. Вони продовжують рухатися з боку в бік, не роблячи жодного прогресу, оскільки рухаються в одному напрямку одночасно. Тут вони ніколи не перетинаються.

Приклад 2:

Приклади Livelock у Operating System

На зображенні вище кожному з двох процесів потрібні два ресурси, і вони використовують примітивне опитування, щоб спробувати отримати необхідні блокування. Якщо спроба не вдається, метод повторює спробу.

  1. Процес A зберігає ресурс Y
  2. Процес B містить ресурс X
  3. Процес A потребує ресурсу X
  4. Процес B потребує ресурсу Y

Припустимо, що першим запускається процес A та отримує ресурс X, а потім запускається процес B та отримує ресурс Y. Незалежно від того, який процес запускається першим, жоден з них не виконує подальших дій.

Однак жоден із двох процесів не блокується. Вони постійно використовують ресурси процесора, не роблячи жодного прогресу, проте ніколи не зупиняються на етапі обробки.

Отже, ця ситуація не є тупик, оскільки жоден процес не блокується; натомість ми стикаємося з ситуацією, еквівалентною глухому блокуванню, яка називається LIVELOCK.

Що призводить до Livelock?

Блокування часу пов'язане з кількістю процесів, дозволених системою, яка визначається загальною кількістю записів у таблиці процесів. Тому ці слоти таблиці процесів розглядаються як обмежені ресурси. Коли процеси неодноразово намагаються отримати ці обмежені ресурси, постійно поступаючись один одному, жоден з них не досягає прогресу, і система вступає в блокування часу.

Що таке Deadlock?

A тупик — це ситуація, яка виникає в ОС, коли процес переходить у стан очікування, оскільки інший процес очікування утримує запитуваний ресурс. Взаємоблокування — поширена проблема в багатопроцесорній обробці, де кілька процесів спільно використовують певний тип взаємовиключного ресурсу, відомий як м’яке блокування або програмне забезпечення.

Приклад тупика

  • Реальним прикладом може бути рух транспорту, який рухається лише в одному напрямку.
  • Тут міст вважається ресурсом.
  • Коли виникає глухий кут, його можна легко вирішити, якщо один автомобіль дасть задній ход (використати ресурси та відкотитися).
  • У разі виникнення тупикової ситуації може знадобитися резервне копіювання кількох автомобілів.
  • Тому можливе голодування.

Приклад глухого кута в Operating System

Приклад тупика

Що таке голодування?

Голодування — це ситуація, коли процеси з низьким пріоритетом блокуються, тоді як процеси з високим пріоритетом виконуються. У будь-якій системі запити на ресурси з високим та низьким пріоритетом відбуваються динамічно. Тому потрібна певна політика, щоб вирішувати, хто і коли отримує послуги.

З деякими алгоритмами певні процеси можуть не отримати бажаного сервісу, навіть якщо вони не перебувають у глухому куті. Голодування виникає, коли деякі потоки роблять спільні ресурси недоступними протягом тривалого періоду часу.

Приклад голодування

Наприклад, об'єкт пропонує синхронізований метод, який, ймовірно, займе багато часу для повернення. Якщо один потік часто використовує цей метод, інші потоки, яким також потрібен частий синхронізований доступ до того ж об'єкта, часто блокуються.

Різниця між Deadlock, Starvation і Livelock

  • Взаємоблокування — це ситуація, яка виникає в ОС, коли процес переходить у стан очікування, оскільки запитуваний ресурс займає інший процес, що очікує.
  • З іншого боку, активне блокування майже схоже на глухий кут, за винятком того, що стани процесів, що беруть участь у активному блокуванні, завжди змінюються у відповідь один на одного, при цьому жоден з них не прогресує.
  • Отже, livelock — це унікальний випадок нестачі ресурсів.

Поширені запитання

Блокування в реальному часі зменшується шляхом додавання випадковості або впорядкування повторних спроб. Методи включають рандомізовану або експоненціальну відстрочку перед повторною спробою, обмеженняping кількість спроб повторення та забезпечення фіксованого порядку отримання блокувань, щоб процеси перестали відображати дії один одного.

Ні. Процеси, що блокуються в реальному часі, ніколи не блокуються — вони продовжують виконуватися та споживають цикли процесора через постійні повторні спроби, не роблячи жодного прогресу. У глухому куті задіяні процеси зупиняються та чекають, тому вони не використовують процесор.

Часто так. Заблоковані процеси залишаються завислими, що легко помітити, тоді як активно заблоковані процеси залишаються активними та постійно змінюють свій стан. Виявлення зазвичай шукає високе використання процесора в поєднанні з нульовим прогресом уперед з часом.

Умова змагання — це неправильний або непередбачуваний результат, спричинений несинхронізованим доступом до спільних даних. Livelock, навпаки, включає процеси, які залишаються активними та постійно змінюють стан у відповідь один на одного, так і не завершивши свою роботу.

Так. Потоки, які неодноразово реагують один на одного — наприклад, одночасно звільняючи та повторно запитуючи блокування — можуть блокуватися в режимі реального часу, ніколи не блокуючись. Це часто проявляється в логіці повторних спроб та відкладень, якій бракує випадковості.

Моделі машинного навчання вивчають моделі використання процесора, планування та ресурсів, щоб позначати процеси, які спалюють цикли без виконання. Це допомагає операторам виявляти блокування в реальному часі раніше, ніж фіксовані порогові значення, особливо у великих хмарних робочих навантаженнях та робочих навантаженнях центрів обробки даних з багатьма взаємодіючими процесами.

Так. GitHub Copilot може запропонувати рандомізовані відстрочки, тайм-аути та послідовні шаблони упорядкування блокувань, які знижують ризик як активного блокування, так і взаємних блокувань. Розробникам все одно слід уважно перевіряти згенеровану логіку паралельності, оскільки ледь помітні помилки в часі легко пропустити.

Іноді. Якщо час зміщується — наприклад, через випадкові інтервали повторних спроб — процеси можуть порушити шаблон і продовжити роботу. Без таких змін блокування в реальному часі може тривати нескінченно довго, витрачаючи ресурси процесора, поки жоден процес не завершить своє завдання.

Підсумуйте цей пост за допомогою: