Terracotta에서 사용하기에“더러운 읽기”가 안전합니까?
-
02-07-2019 - |
문제
다른 스레드에 의해 쓰기로 인해 객체의 값을 읽는다는 것을 의미하는 "Dirty Reads"는 설명 Terracotta의 웹 사이트에서, 나는 당신이 잠긴 물체를 더럽게 읽을 때 오래된 데이터를 얻을 가능성에 관심이 없더라도 사용해서는 안된다고 들었습니다.
누구든지 테라코타에서 Dirty Reads를 사용한 경험이 있습니까? 오래된 가치를 읽을 가능성에 관심이 없다면 사용하기에 안전합니까?
해결책
더러운 읽기는 더러운 읽기입니다. 분산/클러스터 인 Terracotta는 적절한 동기화없이 액세스 할 수있는 공유 된 돌연변이 상태의 이전 값을 읽을 수있는 가능성 만 추가합니다.
Java 5의 메모리 모델에서 보장되지는 않습니다. 항상 올바른 동기화를 사용하지 않으면 업데이트 된 값을 읽으십시오. 테라코타는이 가능성을 활용하기로 결정할 수 있습니다. 실제로, 모든 JVM은 여가 시간에 그것을 활용할 수 있습니다. 컴퓨터에서 작동하더라도 다른 기계에서 파손될 수 있습니다. JVM의 사소한 업데이트에서 중단 될 수 있으며 다른 CPU에서 동일한 버전의 동일한 JVM에 대해서는 중단 될 수 있습니다.
이를 염두에두고 Dirty Reads는 JVM에서 안전하지 않다고 말할 수 있습니다. 다른 스레드가 만드는 업데이트를 읽을 수 없을 가능성이 없다면 상황이 가능성이 거의 없지만 상황이 가능성이 거의 없을 가능성이 없습니다. 일어날 수 있습니다.
또한 실제로 Terracottas Wiki에 대한 링크를 따르면 기사가 제거되었고 패턴이 권장되지 않았다고합니다.
다른 팁
저는 테라코타 개발자입니다. 답의 요점은 Christian Vest Hansen이 이미 언급 한 것과 마찬가지로 JVM이 적절한 동기화없이 액세스하는 공유 객체의 업데이트 가시성에 대해 보장하지 않는 것처럼, Terracotta는 마찬가지로 더러운 읽기에 대해 보장 할 수 없습니다. 클러스터 된 객체.
링크는 실제로 의도적으로 제거 되어이 패턴을 사용하지 않도록 경고로 대체되었습니다.