Post Thumbnail

"Швейцарская таблица" - это продвинутый движок для хэш-таблиц, который сейчас используется в новых версиях Go. Идея в том, чтобы отойти от примитивного линейного поиска, когда при коллизии мы просто тыкаемся в следующую ячейку, и использовать хитрую последовательность шагов, которая не дает образовываться "пробкам" из занятых слотов.

Но все соль в группровке. Вместо одного ключа в ячейке мы храним сразу по 8 штук, и для каждой группы добавляем специальные контрольные байты (младшие 7 битов хэша). Это позволяет за одну операцию сравнивать с хэшем все восемь элементов через битовые трюки с uint64, а это очень быстро.

На практике хоть обычный подход и шустрее на малых объемах, swiss table раскрывается при высокой заполненности: если забить ее под завязку, она тормозит в разы меньше обычной

Похожее

Post Thumbnail

Кодим чат

Автор просто час пишет чат. Никаких слов, никакого хайпа. Просто час кодинга под...

Post Thumbnail

Арены жалко

Go отказался от экспериментальных Memory Arenas - механизма, позволявшего выделя...