Filas ring buffer lock-free de C++14, em header-only, para troca de mensagens entre threads com latência mínima entre push e pop.
greg7mdp/parallel-hashmap
Biblioteca C++ header-only de mapas hash, conjuntos e contêineres B-tree rápidos e econômicos em memória, que substituem os contêineres padrão da STL.
- Estrelas
- 3,223
- Forks
- 313
- Issues abertas
- 4
- Último commit
- mês passado
O que é?
Parallel Hashmap (phmap) é uma biblioteca C++ com implementações de mapas hash e conjuntos, além de contêineres ordenados baseados em B-tree que servem como alternativas a std::map e std::set. Ela é header-only: basta copiar o diretório parallel_hashmap para um projeto e incluí-lo, sem etapa de compilação. As tabelas hash substituem diretamente std::unordered_map e std::unordered_set, e as B-trees substituem std::map e std::set.
As tabelas hash usam hashing fechado, com os valores armazenados diretamente em um array de memória, o que reduz indireções. A biblioteca se baseia em código adaptado das implementações de swiss table e B-tree do Abseil. As variantes paralelas dividem uma tabela em submapas, reduzindo o pico de uso de memória durante redimensionamentos e permitindo o uso de locks internos para leituras e gravações concorrentes quando um tipo de mutex é fornecido.
Também é possível despejar as flat hash maps em disco e restaurá-las como um único array quando os tipos armazenados são trivialmente copiáveis. A biblioteca oferece headers para declarações antecipadas e dá suporte a busca heterogênea e às APIs do C++11 ao C++17.
Recursos principais
- 01Header-only, sem necessidade de compilação além de configurar o caminho de inclusão.
- 02Substitutos diretos de std::unordered_map, std::unordered_set, std::map e std::set.
- 03Mapas hash paralelos divididos em submapas, com opção de locking interno para acesso concorrente.
- 04Tabelas flat podem ser despejadas em disco e restauradas como um único array para tipos trivialmente copiáveis.
- 05Dá suporte a busca heterogênea e a APIs do C++11 ao C++17, como try_emplace.
Casos de uso
- Substituir std::unordered_map em código C++ sensível a desempenho.
- Armazenar um número muito grande de entradas quando reduzir o uso de memória é importante.
- Criar serviços multithread que compartilham uma tabela hash entre threads com locking interno.
- Persistir rapidamente grandes tabelas de consulta, despejando-as em disco como um array binário.
Início rápido
- 1
Copie o diretório parallel_hashmap para o seu projeto e adicione-o ao caminho de inclusão
- 2
Compile e execute os testes e exemplos com CMake
cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
Antes de usar
- O README recomenda migrar para o projeto gtl, que requer C++20; o desenvolvimento de novos recursos será transferido para lá.
- Mapas hash planos movem os valores na memória, portanto alterações podem invalidar ponteiros e iteradores para esses valores.
- É uma biblioteca header-only para C++11, sem instalação empacotada; é necessário copiar o diretório manualmente.
Tópicos
Perguntas frequentes
- O que é parallel-hashmap?
- Biblioteca C++ header-only de mapas hash, conjuntos e contêineres B-tree rápidos e econômicos em memória, que substituem os contêineres padrão da STL. Parallel Hashmap (phmap) é uma biblioteca C++ com implementações de mapas hash e conjuntos, além de contêineres ordenados baseados em B-tree que servem como alternativas a std::map e std::set. Ela é header-only: basta copiar o diretório parallel_hashmap para um projeto e incluí-lo, sem etapa de compilação. As tabelas hash substituem diretamente std::unordered_map e std::unordered_set, e as B-trees substituem std::map e std::set.
- parallel-hashmap é gratuito? Qual é a licença?
- parallel-hashmap é open source sob a licença Apache-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
- parallel-hashmap ainda é mantido?
- Atualizado nos últimos 6 meses. O último commit de parallel-hashmap foi em 10 de set. de 2026.
- Para que posso usar parallel-hashmap?
- Substituir std::unordered_map em código C++ sensível a desempenho. Armazenar um número muito grande de entradas quando reduzir o uso de memória é importante. Criar serviços multithread que compartilham uma tabela hash entre threads com locking interno. Persistir rapidamente grandes tabelas de consulta, despejando-as em disco como um array binário.
- Como instalar parallel-hashmap?
- Copie o diretório parallel_hashmap para o seu projeto e adicione-o ao caminho de inclusão Compile e execute os testes e exemplos com CMake: cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
- Onde consigo parallel-hashmap?
- O código-fonte e as instruções de instalação estão no GitHub: https://github.com/greg7mdp/parallel-hashmap
Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.
Projetos relacionados
Uma biblioteca C++11 em um único header para criar servidores e clientes HTTP/HTTPS com I/O de socket bloqueante.
Um microframework C++ rápido, no estilo do Flask, para criar serviços web HTTP e WebSocket, distribuído como header-only e fácil de usar.
Biblioteca C++ header-only para parsing rápido e exato de valores float, double e inteiros a partir de strings, com uma implementação substituta de from_chars.
Biblioteca de strings acelerada por SIMD e SWAR para C, C++, Python, Rust, JavaScript, Go e outras linguagens, com busca, hashing, ordenação e distâncias de edição.
Biblioteca C++11 header-only que permite analisar, criar, manipular e serializar JSON em C++ com uma sintaxe semelhante à da STL.