스레드 간 메시지를 최소한의 push-to-pop 지연으로 전달하는 헤더 전용 C++14 무잠금 링 버퍼 큐입니다.
greg7mdp/parallel-hashmap
표준 unordered 및 ordered 컨테이너를 대체할 수 있는 빠르고 메모리 효율적인 해시 맵·세트와 B-tree 컨테이너를 제공하는 헤더 전용 C++ 라이브러리입니다.
- 스타
- 3,223
- 포크
- 313
- 열린 이슈
- 4
- 마지막 커밋
- 지난달
어떤 프로젝트인가요?
Parallel Hashmap(phmap)은 해시 맵과 세트 구현, 그리고 std::map과 std::set의 대안인 B-tree 기반 정렬 컨테이너를 제공하는 C++ 라이브러리입니다. 헤더 전용이므로 parallel_hashmap 디렉터리를 프로젝트에 복사해 include하면 되며, 별도의 빌드 단계가 필요하지 않습니다. 해시 테이블은 std::unordered_map과 std::unordered_set의 드롭인 대체품이고, B-tree는 std::map과 std::set의 대체품입니다.
해시 테이블은 값을 메모리 배열에 직접 저장하는 폐쇄형 해싱을 사용해 간접 참조를 줄입니다. 라이브러리는 Abseil의 swiss table 및 B-tree 구현을 바탕으로 수정한 코드로 구성되어 있습니다. 병렬 변형은 테이블을 여러 하위 맵으로 나눠 크기 조정 중 최대 메모리 사용량을 줄이며, 뮤텍스 타입을 지정하면 내부 잠금을 통해 동시 읽기와 쓰기를 지원합니다.
저장 타입이 trivially copyable인 경우 flat hash map을 디스크에 덤프하고 하나의 배열로 복원할 수도 있습니다. 전방 선언 헤더를 제공하며, 이종 조회와 C++11부터 C++17까지의 API를 지원합니다.
핵심 기능
- 01헤더 전용이며 include 경로만 설정하면 사용할 수 있습니다.
- 02std::unordered_map, std::unordered_set, std::map, std::set의 드롭인 대체품입니다.
- 03병렬 해시 맵은 여러 하위 맵으로 나뉘며, 동시 접근을 위한 내부 잠금을 선택적으로 사용할 수 있습니다.
- 04trivially copyable 타입은 flat table을 디스크에 덤프하고 하나의 배열로 복원할 수 있습니다.
- 05이종 조회와 try_emplace 같은 C++11부터 C++17까지의 API를 지원합니다.
활용 사례
- 성능이 중요한 C++ 코드에서 std::unordered_map을 대체합니다.
- 메모리 사용량을 줄이는 것이 중요한 대규모 엔트리를 저장합니다.
- 내부 잠금을 통해 여러 스레드가 해시 테이블을 공유하는 멀티스레드 서비스를 구축합니다.
- 대규모 조회 테이블을 바이너리 배열로 디스크에 덤프해 빠르게 저장합니다.
빠른 시작
- 1
parallel_hashmap 디렉터리를 프로젝트에 복사하고 include 경로에 추가하세요
- 2
CMake로 테스트와 예제를 빌드하고 실행하세요
cmake -DPHMAP_BUILD_TESTS=ON -DPHMAP_BUILD_EXAMPLES=ON -B build && cmake --build build && ctest --test-dir build
사용 전 알아둘 점
- README에서는 gtl 프로젝트로의 마이그레이션을 권장합니다. gtl에는 C++20이 필요하며, 향후 기능 개발은 해당 프로젝트로 옮겨갑니다.
- 플랫 해시 맵은 메모리에서 값을 이동하므로, 변경 작업 시 내부 포인터와 이터레이터가 무효화될 수 있습니다.
- C++11 헤더 전용 라이브러리이며 패키지 설치를 제공하지 않습니다. 디렉터리를 직접 복사해야 합니다.
토픽
자주 묻는 질문
- parallel-hashmap은(는) 무엇인가요?
- 표준 unordered 및 ordered 컨테이너를 대체할 수 있는 빠르고 메모리 효율적인 해시 맵·세트와 B-tree 컨테이너를 제공하는 헤더 전용 C++ 라이브러리입니다. Parallel Hashmap(phmap)은 해시 맵과 세트 구현, 그리고 std::map과 std::set의 대안인 B-tree 기반 정렬 컨테이너를 제공하는 C++ 라이브러리입니다. 헤더 전용이므로 parallel_hashmap 디렉터리를 프로젝트에 복사해 include하면 되며, 별도의 빌드 단계가 필요하지 않습니다. 해시 테이블은 std::unordered_map과 std::unordered_set의 드롭인 대체품이고, B-tree는 std::map과 std::set의 대체품입니다.
- parallel-hashmap은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
- parallel-hashmap은(는) Apache-2.0 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
- parallel-hashmap은(는) 아직 유지보수되고 있나요?
- 6개월 이내 업데이트. parallel-hashmap의 마지막 커밋은 2026년 9월 10일입니다.
- parallel-hashmap은(는) 어디에 사용할 수 있나요?
- 성능이 중요한 C++ 코드에서 std::unordered_map을 대체합니다. 메모리 사용량을 줄이는 것이 중요한 대규모 엔트리를 저장합니다. 내부 잠금을 통해 여러 스레드가 해시 테이블을 공유하는 멀티스레드 서비스를 구축합니다. 대규모 조회 테이블을 바이너리 배열로 디스크에 덤프해 빠르게 저장합니다.
- parallel-hashmap는 어떻게 설치하나요?
- parallel_hashmap 디렉터리를 프로젝트에 복사하고 include 경로에 추가하세요 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를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.
관련 프로젝트
블로킹 소켓 I/O로 HTTP/HTTPS 서버와 클라이언트를 구축할 수 있는 C++11 단일 헤더 라이브러리입니다.
HTTP 및 WebSocket 웹 서비스를 만들기 위한 빠르고 사용하기 쉬운 Flask 스타일의 헤더 전용 C++ 마이크로프레임워크입니다.
문자열에서 float, double, 정수 값을 빠르고 정확하게 파싱하는 헤더 전용 C++ 라이브러리로, from_chars를 바로 대체해 사용할 수 있습니다.
C, C++, Python, Rust, JavaScript, Go 등에서 검색, 해싱, 정렬, 편집 거리를 지원하는 SIMD·SWAR 가속 문자열 라이브러리입니다.
C++ 코드에서 STL과 비슷한 문법으로 JSON을 파싱하고 생성·조작·직렬화할 수 있는 헤더 전용 C++11 라이브러리입니다.