75 개 이상의 요청이 있으며 각 요청은지도를 업데이트하거나 액세스하려고합니다. 그리고 MAP을 업데이트하는 동안 코드 블록 동기화를 사용합니다. 그러면 성능 문제가 발생할 수 있습니다.이 시나리오에서 동기화를 어떻게 피할 수 있습니까?
MAP, 75+ 요청을 동시에 업데이트하려면 다른 방법을 제안하십시오.
참고 : 위의 아이디어를 Java로 구현하려고합니다.
75 개 이상의 요청이 있으며 각 요청은지도를 업데이트하거나 액세스하려고합니다. 그리고 MAP을 업데이트하는 동안 코드 블록 동기화를 사용합니다. 그러면 성능 문제가 발생할 수 있습니다.이 시나리오에서 동기화를 어떻게 피할 수 있습니까?
MAP, 75+ 요청을 동시에 업데이트하려면 다른 방법을 제안하십시오.
참고 : 위의 아이디어를 Java로 구현하려고합니다.
그것을 해결하기 위해 여러 가지 방법이 있습니다, 무엇을 가장 잘 맞는 참조 성능 과부하를 확인하십시오. ConcurrentHashMap의 경우, ConcurrentHashMap의 특정 섹션에서 잠금이 확보됩니다. 즉, 두 개의 스레드가 두 개의 다른 섹션에 개별적으로 액세스하려고 시도하는 경우 대기없이 수행 할 수 있습니다.
concurrent hash map을 사용해보세요. 기본적으로 해시 맵을 더 작은 범위로 나누고 전체 맵에 잠금을 설정하는 대신 작은 범위에서만 잠금을 설정합니다.
hashmap을 사용하여 synchronized 블록을 사용하는 경우 완전한 해시 맵에 잠금을 설정하고 2 회 쓰기 작업을 동시에 수행 할 수 없습니다. 그러나 동시 해시 맵을 사용하고 서로 다른 범위에서 2 개의 쓰기 작업을 작성하는 경우 두 작업을 동시에 수행 할 수 있습니다.
더 나은 이해를 위해 사용하기 전에 how concurrent hash map works을 참조하십시오.
편집 : hashmap 및 concurrenthashmap의 성능 향상을 단일 및 다중 스레드 응용 프로그램에서 확인하십시오. Performance ConcurrentHashmap vs HashMap.
SynchronizedMap ConcurrentHashMap의
당신이 증가 할 수있는 요청의 수 당신을 위해 더 좋을 것 ConcurrentHashMap을 사용하는 경우 당신은하지 않습니다 :
한 번에 75 개 정도의 요청으로 인해 Map
에 액세스하는 다양한 방법간에 성능상의 차이가 발생할 가능성은 거의 없습니다. 가장 중요한 것은 코드의 단순성과 유지 보수성입니다. java.util.ConcurrentHashMap
은 설명하는 규모로 성능 이점을 나타내지는 않지만 다른 솔루션보다 작업하기가 훨씬 쉽습니다.
ConcurrentHashMap의 기존 답변과 함께 몇 가지 추가 원근감을 추가하겠습니다. 많은 요청이 유형 읽기이고 요청이 거의 없다면 java.util.concurrent.locks.ReadWriteLock을 살펴볼 수 있습니다. 여러 스레드가 리소스를 읽을 수 있지만 한 번에 하나만 쓸 수 있습니다. 업데이트 요청이 여러 번있는 경우 이전 답변에서 제안한대로 ConcurrentHashMap을 사용할 수 있습니다.
스레드 안전지도를 원할 경우 동시에 여러 번 액세스 할 수 없으므로 성능 문제가 발생합니다. – BackSlash