분리 잠 금 기반 hash 맵 구현
Concurrent HashMap 의 실현 은 16 개의 대상 자 물 쇠 를 포함 하 는 배열 을 사 용 했 습 니 다. 모든 자 물 쇠 는 hash buckets 배열 의 동기 화 를 담당 합 니 다. 1 / 16 의 원소;buckets 의 n 번 째 요 소 는 locks 에서 n 번 째 를 16 개의 자물쇠 로 나 누 어 지 킵 니 다. hash 알고리즘 의 실현 이 합 리 적 인 확장 성 을 제공 할 수 있 고 키 워드 는 통 일 된 방식 으로 접근 할 수 있다 고 가정 하면 자물쇠 에 대한 요 구 를 원래 의 1 / 16 로 줄 일 수 있 습 니 다. 이러한 분리 잠 금 디자인 을 바탕 으로 하 는 기술 은 Concurrent HashMap 이 16 개의 동시 다발 요 구 를 지원 할 수 있 습 니 다.
그러나 자 물 쇠 를 분리 하 는 부정적인 작용 은 용기 에 자 물 쇠 를 넣 고 독점 방문 을 하 는 것 이 더욱 어렵 고 비 싸 다 는 것 이다.
예 를 들 어 buckets 의 부하 도가 밸브 값 을 초과 하면 용량 이 확장 되 어야 하고 요 소 는 다시 정렬 해 야 합 니 다. 그리고 더 큰 buckets 를 넣 을 때 우 리 는 모든 분리 자 물 쇠 를 가 져 야 합 니 다.
잠 금 을 분리 하면 신축 성능 을 개선 할 수 있 습 니 다. 서로 다른 스 레 드 작업 이 서로 다른 데이터 (또는 같은 데이터 구조의 다른 부분) 를 지원 하기 때문에 상호 간 의 간섭 이 발생 하지 않 습 니 다. 이 점 은 잠 금 경쟁 이 잠 금 데 이 터 를 지 키 는 경쟁 보다 보편적으로 큰 절차 에 매우 유익 합 니 다.
public class StropedMap
{
private static final int N_LOCKS = 16;
private final Node[] buckets;
private final Object[] locks;
public StropedMap(int numBuckets)
{
super();
buckets = new Node[numBuckets];
locks = new Object[N_LOCKS];
for(int i=0;i<this.buckets.length;i++){
synchronized(locks[i%N_LOCKS]){
buckets[i] = null;
}
}
}
class Node {
Object key;
Object value;
Node next;
public Node(Object key, Object value) {
super();
this.key = key;
this.value = value;
this.next = null;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.