Заголовочная C++14-библиотека с lock-free очередями на кольцевых буферах для обмена сообщениями между потоками с минимальной задержкой от push до pop.
greg7mdp/parallel-hashmap
Header-only библиотека на C++ с быстрыми и экономичными по памяти хеш-таблицами и B-деревьями — альтернативами контейнерам std.
- Звёзды
- 3,223
- Форки
- 313
- Открытые issues
- 4
- Последний коммит
- в прошлом месяце
Что это?
Parallel Hashmap (phmap) — библиотека на C++ с реализациями хеш-таблиц и множеств, а также упорядоченными контейнерами на основе B-деревьев — альтернативами std::map и std::set. Библиотека состоит только из заголовочных файлов: достаточно скопировать каталог parallel_hashmap в проект и подключить его, без этапа сборки. Хеш-таблицы можно напрямую подставить вместо std::unordered_map и std::unordered_set, а B-деревья — вместо std::map и std::set.
В хеш-таблицах используется закрытая адресация: значения хранятся непосредственно в массиве памяти, что сокращает число косвенных обращений. В основе библиотеки — код, адаптированный из реализаций swiss table и B-деревьев в Abseil. Параллельные варианты разбивают таблицу на подтаблицы, что снижает пиковое потребление памяти при изменении размера и позволяет использовать внутреннюю блокировку для параллельного чтения и записи, если передать тип мьютекса.
Плоские хеш-таблицы также можно сохранить на диск и восстановить как единый массив, если хранящиеся типы тривиально копируемы. В библиотеке есть заголовки с предварительными объявлениями; поддерживаются гетерогенный поиск и API от C++11 до C++17.
Ключевые возможности
- 01Библиотека состоит только из заголовочных файлов; для подключения не нужна сборка.
- 02Прямая замена std::unordered_map, std::unordered_set, std::map и std::set.
- 03Параллельные хеш-таблицы разбиваются на подтаблицы; для параллельного доступа можно включить внутреннюю блокировку.
- 04Плоские таблицы для тривиально копируемых типов можно сохранить на диск и восстановить как единый массив.
- 05Поддерживаются гетерогенный поиск и API от C++11 до C++17, включая try_emplace.
Сценарии использования
- Замена std::unordered_map в требовательном к производительности коде на C++.
- Хранение очень большого числа элементов, когда важно сократить расход памяти.
- Создание многопоточных сервисов, в которых потоки совместно используют хеш-таблицу с внутренней блокировкой.
- Быстрое сохранение больших таблиц поиска на диск в виде бинарного массива.
Быстрый старт
- 1
Скопируйте каталог parallel_hashmap в проект и добавьте его в путь поиска заголовочных файлов
- 2
Соберите и запустите тесты и примеры с помощью CMake
cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
Что важно знать
- В README рекомендуется перейти на проект gtl, которому требуется C++20; дальнейшая разработка функций будет вестись там.
- Плоские хеш-таблицы перемещают значения в памяти, поэтому при изменении таблицы указатели и итераторы на эти значения могут стать недействительными.
- Это header-only библиотека для C++11 без готового пакета для установки; каталог нужно скопировать вручную.
Темы
Частые вопросы
- Что такое parallel-hashmap?
- Header-only библиотека на C++ с быстрыми и экономичными по памяти хеш-таблицами и B-деревьями — альтернативами контейнерам std. Parallel Hashmap (phmap) — библиотека на C++ с реализациями хеш-таблиц и множеств, а также упорядоченными контейнерами на основе B-деревьев — альтернативами std::map и std::set. Библиотека состоит только из заголовочных файлов: достаточно скопировать каталог parallel_hashmap в проект и подключить его, без этапа сборки. Хеш-таблицы можно напрямую подставить вместо std::unordered_map и std::unordered_set, а B-деревья — вместо std::map и std::set.
- parallel-hashmap можно использовать бесплатно? Какая у него лицензия?
- parallel-hashmap распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- parallel-hashmap всё ещё поддерживается?
- Обновлялся за последние 6 месяцев. Последний коммит в parallel-hashmap — 10 сент. 2026 г..
- Для чего можно использовать parallel-hashmap?
- Замена std::unordered_map в требовательном к производительности коде на C++. Хранение очень большого числа элементов, когда важно сократить расход памяти. Создание многопоточных сервисов, в которых потоки совместно используют хеш-таблицу с внутренней блокировкой. Быстрое сохранение больших таблиц поиска на диск в виде бинарного массива.
- Как установить parallel-hashmap?
- Скопируйте каталог parallel_hashmap в проект и добавьте его в путь поиска заголовочных файлов Соберите и запустите тесты и примеры с помощью CMake: cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
- Где скачать parallel-hashmap?
- Исходный код и инструкции по установке — на GitHub: https://github.com/greg7mdp/parallel-hashmap
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Однофайловая библиотека на C++11 для создания HTTP/HTTPS-серверов и клиентов с блокирующим вводом-выводом через сокеты.
Быстрый микрофреймворк на C++ в стиле Flask для создания HTTP- и WebSocket-сервисов: header-only и простой в использовании.
Header-only библиотека C++ для быстрого и точного разбора строк в float, double и целые числа; drop-in-реализация from_chars.
Библиотека строк для C, C++, Python, Rust, JavaScript, Go и других языков, ускоряющая поиск, хеширование, сортировку и вычисление редакционного расстояния с помощью SIMD и SWAR.
Библиотека C++11, состоящая из одного заголовочного файла и позволяющая разбирать, создавать, изменять и сериализовать JSON с синтаксисом в духе STL.