В поисках алгоритма для реализации параллельных хеш-таблиц, которые не перефразируют всю таблицу каждый раз, когда необходимо изменить ее размер, я нашел следующую статью:
Алгоритмы одновременной перефразировки для каждого сегмента
Концепция «Многоуровневая перефразировка» привлекла мое внимание. В документе говорится:
2.3 Многоуровневая перефразировка
Недостатки рекурсивного хеширования могут быть устранены путем расширения
ведра с более сложным контрольным полем, которое указывает количество
сегменты перефразированы. Таким образом, любая операция доступа к «старому» сегменту может
определить необходимость перефразировки и переместить данные непосредственно в
все новые ведра доступны сразу, как показано на рисунке 3.
Тем не менее, рекурсивная перефразировка может быть лучшим выбором при изменении размера
это редкое событие, и нет места для дополнительного поля в
Ковш.
Но я не понимаю. Что такое rehashed segments
?
В статье позже говорится:
Для многоуровневой перефразировки эта проверка тривиальна с использованием информации
о перефразированных сегментах, хранящихся в корзине, которая фактически является текущей
емкость эффективна для данного ковша. Трудность здесь довольно
в алгоритме обнаружения правильного корневого родителя в то время как другие потоки
может перефразировать его одновременно (не обсуждается в статье).
Опять же, что такое rehashed segments
?