728x90
반응형
이전에 authprovider랑 provider에 대해서 작성한 글과 원래는 같이 작성하려고 하였지만, 분량과 가독성을 위해 따로 글을 올리게 되었습니다. ConcurrentHashMap & ConcurrentSkipListMap 은 제가 알고 있는 hashMap과 skipList의 단어를 포함하고 있어 찾아보게 되었습니다. 혹시나 HashMap에 대해 궁금하신 분은 아래 글을 참고하시면 좋겠습니다!!
https://zoohwan99.tistory.com/17
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을 허용하지 않음.
- 일관된 상태 보장 : 대부분의 연산이 동시성을 보장하도록 설계되어 있음.
공통점
- 동시성 지원 : 두 클래스 모두 다중 스레드 환경에서 안전하게 사용될 수 있도록 설계.
- null 값 허용 안 함 : 키와 값 모두 null을 허용하지 않음.
- 읽기/쓰기 성능 최적화 : 동시 접근에 대한 최적화가 이루어져 있음.
차이점
- 내부 구조:
- ConcurrentHashMap: 내부적으로 여러 개의 세그먼트를 사용하는 해시맵 구조.
- ConcurrentSkipListMap: 스킵 리스트라는 자료구조를 사용하는 정렬된 맵.
- 정렬:
- ConcurrentHashMap: 키의 순서를 유지하지 않음. 정렬되지 않은 상태로 저장.
- ConcurrentSkipListMap: 항상 키의 자연 순서나 제공된 비교자에 따라 정렬된 상태를 유지.
- 용도:
- ConcurrentHashMap: 빠른 조회 및 삽입이 중요한 경우에 사용. 특히 키의 순서가 중요하지 않은 경우.
- ConcurrentSkipListMap: 키의 정렬이 중요한 경우에 사용. 예를 들어, 범위 검색이나 정렬된 순서로의 반복이 필요한 경우.
- 성능 특성:
- ConcurrentHashMap: 락 분할을 통해 높은 성능을 제공하며, 대체로 ConcurrentSkipListMap보다 빠름.
- ConcurrentSkipListMap: 정렬된 상태를 유지하기 때문에 삽입, 삭제, 검색 등의 연산에서 약간의 추가 비용이 발생.
요약
- ConcurrentHashMap은 빠른 조회와 삽입을 제공하는 해시맵 기반의 동시성 맵.
- ConcurrentSkipListMap은 정렬된 상태를 유지하는 스킵 리스트 기반의 동시성 맵.
- 두 클래스 모두 동시성 환경에서 안전하게 사용할 수 있지만, 내부 구조와 특성에 따라 적합한 용도가 다름.
ConcurrentHashMap과 ConcurrentSkipListMap은 같이 알아본 결과, Java에서 동시성을 지원하는 두 가지 주요 맵 구현체입니다. 이들은 다중 스레드 환경에서 안전하게 사용될 수 있으며, 각기 다른 내부 구조와 특성을 가지고 있습니다.
https://github.com/bottomsUp-99
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 |