Область применения зачистки - PullRequest
1 голос
/ 05 мая 2009

ConcurrentHashMap из JDK использует технику снятия блокировки. Это хорошая идея, чтобы минимизировать накладные расходы блокировки. Есть ли другие библиотеки или инструменты, которые используют это в своих интересах? Например, ядро ​​базы данных использует это?

Если техника не так полезна в других областях, каково ее ограничение?

1 Ответ

4 голосов
/ 15 февраля 2012

Чередование блокировок полезно, когда есть способ разбить блокировку с высокой конкуренцией на несколько блокировок, не нарушая целостность данных. Если это возможно или нет, следует подумать и не всегда так. Структура данных также является фактором, способствующим принятию решения. Поэтому, если мы используем большой массив для реализации хеш-таблицы, использование единой блокировки для всей хеш-таблицы для синхронизации приведет к тому, что потоки будут последовательно обращаться к структуре данных. Если это одно и то же место в хеш-таблице, то это необходимо, но, что если они обращаются к двум крайностям таблицы.

Определенно много времени сэкономлено при использовании чередования блокировок. Несколько сценариев почти вдвое сокращают время выполнения.

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

...