В чем разница между конвоем блокировок и конфликтом блокировок / потоков?

Aug 18 2020

Из википедии о блокировке конвоя:

Конвой блокировок происходит, когда несколько потоков с одинаковым приоритетом постоянно борются за одну и ту же блокировку. В отличие от ситуаций взаимоблокировки и динамической блокировки, потоки в конвои блокировок выполняются; однако каждый раз, когда поток пытается получить блокировку и терпит неудачу, он отказывается от оставшейся части своего кванта планирования и вызывает переключение контекста. Накладные расходы на повторяющиеся переключения контекста и недоиспользование квантов планирования ухудшают общую производительность.

Из Википедии о конфликте блокировок / потоков:

конфликт блокировки: это происходит всякий раз, когда один процесс или поток пытается получить блокировку, удерживаемую другим процессом или потоком. Чем более детализированы доступные блокировки, тем менее вероятно, что один процесс / поток запросит блокировку, удерживаемую другим. (Например, блокировка строки, а не всей таблицы, или блокировка ячейки, а не всей строки.);

Не мог бы кто-нибудь подробнее рассказать об этих двух вещах? Мне кажется, что они, по сути, одинаковы, или, если это не так, то конкуренция блокировок, несомненно, вызывает конвой блокировок. Так ли это или это отдельные и независимые концепции? Кроме того, я не понимаю предложение «он отказывается от оставшейся части своего кванта планирования и вызывает переключение контекста».

Ответы

1 ajit Sep 03 2020 at 13:30

В алгоритмах блокировки используются два подхода к блокировке, когда блокировка занята . ожидание вращения или блокировка (перейти в спящий режим, освободить процессор и подождать, пока ОС пробудит поток и изменит расписание). Блокировка конвоя, как упоминалось выше, произойдет при использовании стратегии блокировки.
ОС планирует потоки в ядре с привязкой по времени . Каждый поток получает процессор для определенного временного отрезка, скажем, 2 мс. ОС в циклическом режимемодно запланировать все потоки в очереди готовности по очереди. Если, скажем, поток после того, как он получит расписание и начнет его выполнение, скажем, после 100 мкс, попросите блокировку. Если блокировка занята, поток не может получить блокировку, блокирует и отказывается от процессора. Таким образом, оставшийся временной интервал 1,9 мс (2 мс-100 мкс) не используется потоком. Даже после пробуждения ОС, когда блокировка свободна, поток должен ждать своей очереди в очереди с циклическим перебором. Количество активных потоков может достигать 100.

Конфликт за блокировку вызывает эффект конвоя.