자료구조

ConcurrentHashMap VS ConcurrentSkipListMap 이란?

Z00_HWAN_99 2024. 6. 19. 22:16
728x90
반응형

이전에 authprovider랑 provider에 대해서 작성한 글과 원래는 같이 작성하려고 하였지만, 분량과 가독성을 위해 따로 글을 올리게 되었습니다.  ConcurrentHashMap & ConcurrentSkipListMap 은 제가 알고 있는 hashMap과 skipList의 단어를 포함하고 있어 찾아보게 되었습니다. 혹시나 HashMap에 대해 궁금하신 분은 아래 글을 참고하시면 좋겠습니다!!

https://zoohwan99.tistory.com/17

 

HashMap이란?

이번 글에서는 제가 백준과 프로그래머스에서 알고리즘을 풀며 자주 나오는 HashMap에 대해서 알려드리는 글을 써보려고 합니다.이 자료구조는 많은 코딩테스트에도 등장하기도 하니, 많은 분들

zoohwan99.tistory.com

 

ConcurrentHashMap이란?

  • ConcurrentHashMap은 Java의 java.util.concurrent 패키지에 포함된 클래스.
  • 이 클래스는 동시성을 지원하는 해시맵 구현체로, 다중 스레드 환경에서의 안전한 읽기 및 쓰기 연산을 보장.

ConcurrentHashMap의 구조?

  • ConcurrentHashMap은 내부적으로 여러 개의 세그먼트(segment)로 나누어져 있음.
  • 각 세그먼트는 독립적으로 잠글 수 있어 다중 스레드가 동시에 다른 세그먼트에 접근.

ConcurrentHashMap의 특징?

  • 높은 성능 : 여러 스레드가 동시 접근할 때 성능 저하가 적음.
  • 락 분할 : 세그먼트를 사용하여 락을 분할해, 특정 세그먼트에만 락을 걸어 성능을 향상.
  • null 값 허용하지 않음 : 키와 값 모두 null을 허용하지 않음.
  • 일관된 상태 보장 : 읽기 작업은 락을 사용하지 않기 때문에 매우 빠르며, 쓰기 작업은 락을 사용하여 동기화.

 

ConcurrentSkipListMap이란?

  • ConcurrentSkipListMap은 Java의 java.util.concurrent 패키지에 포함된 클래스.
  • 이 클래스는 동시성을 지원하는 스킵 리스트 기반의 정렬된 맵 구현체로, 항상 키에 따라 정렬된 상태를 유지.

ConcurrentSkipListMap의 구조?

  • ConcurrentSkipListMap은 스킵 리스트(skip list)라는 자료구조를 사용.
  • 스킵 리스트는 여러 레벨의 링크드 리스트로 구성되며, 각 레벨은 이전 레벨의 부분 집합 ->이 구조는 트리와 비슷한 시간 복잡도로 요소를 검색할 수 있도록 함.

ConcurrentSkipListMap의 특징?

  • 정렬된 맵 : 항상 키의 자연 순서나 제공된 비교자에 따라 정렬된 상태를 유지.
  • 높은 동시성 : 여러 스레드가 동시에 접근할 수 있도록 최적화되어 있음.
  • null 값 허용하지 않음 : 키와 값 모두 null을 허용하지 않음.
  • 일관된 상태 보장 : 대부분의 연산이 동시성을 보장하도록 설계되어 있음.

공통점

  1. 동시성 지원 : 두 클래스 모두 다중 스레드 환경에서 안전하게 사용될 수 있도록 설계.
  2. null 값 허용 안 함 : 키와 값 모두 null을 허용하지 않음.
  3. 읽기/쓰기 성능 최적화 : 동시 접근에 대한 최적화가 이루어져 있음.

차이점

  1. 내부 구조:
    • ConcurrentHashMap: 내부적으로 여러 개의 세그먼트를 사용하는 해시맵 구조.
    • ConcurrentSkipListMap: 스킵 리스트라는 자료구조를 사용하는 정렬된 맵.
  2. 정렬:
    • ConcurrentHashMap: 키의 순서를 유지하지 않음. 정렬되지 않은 상태로 저장.
    • ConcurrentSkipListMap: 항상 키의 자연 순서나 제공된 비교자에 따라 정렬된 상태를 유지.
  3. 용도:
    • ConcurrentHashMap: 빠른 조회 및 삽입이 중요한 경우에 사용. 특히 키의 순서가 중요하지 않은 경우.
    • ConcurrentSkipListMap: 키의 정렬이 중요한 경우에 사용. 예를 들어, 범위 검색이나 정렬된 순서로의 반복이 필요한 경우.
  4. 성능 특성:
    • ConcurrentHashMap: 락 분할을 통해 높은 성능을 제공하며, 대체로 ConcurrentSkipListMap보다 빠름.
    • ConcurrentSkipListMap: 정렬된 상태를 유지하기 때문에 삽입, 삭제, 검색 등의 연산에서 약간의 추가 비용이 발생.

요약

  • ConcurrentHashMap은 빠른 조회와 삽입을 제공하는 해시맵 기반의 동시성 맵.
  • ConcurrentSkipListMap은 정렬된 상태를 유지하는 스킵 리스트 기반의 동시성 맵.
  • 두 클래스 모두 동시성 환경에서 안전하게 사용할 수 있지만, 내부 구조와 특성에 따라 적합한 용도가 다름.

ConcurrentHashMap과 ConcurrentSkipListMap은 같이 알아본 결과, Java에서 동시성을 지원하는 두 가지 주요 맵 구현체입니다. 이들은 다중 스레드 환경에서 안전하게 사용될 수 있으며, 각기 다른 내부 구조와 특성을 가지고 있습니다.

 

https://github.com/bottomsUp-99

 

bottomsUp-99 - Overview

Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.

github.com

 

728x90
반응형

'자료구조' 카테고리의 다른 글

자바 스트림(Stream)이란?  (0) 2024.07.03
Comparable VS Comparator 의 이해  (0) 2024.06.30
AuthProvider VS Provider 이란?  (0) 2024.06.19
Map이란?  (0) 2024.06.19
HashSet이란?  (0) 2024.06.17