2013-01-24 4 views
3

내 응용 프로그램은 메모리 매핑을 사용하여 데이터 파일에 동시 액세스해야합니다. 내 목표는 공유 메모리 시스템에서 확장 성을 높이는 것입니다. 메모리 매핑 된 파일의 라이브러리 구현의 소스 코드를 공부 후, 나는 알아낼 수 없습니다 :메모리 매핑 된 파일이 동시 가져 오기/가져 오기를 지원합니까?

  • 는 여러 스레드에서 MappedByteBuffer에서 읽을 합법적입니까? get 다른 get은 OS (* nix) 수준에서 차단합니까?
  • MappedByteBuffer에 스레드 put이있는 경우 다른 스레드에서 바로 볼 수있는 내용이 get입니까?

감사합니다.

요점을 명확히하기 : 스레드가 복수 인스턴스가 아닌 MappedByteBuffer의 단일 인스턴스를 사용하고 있습니다.

답변

1

버퍼는 스레드로부터 안전하지 않으며 해당 액세스는 적절한 동기화에 의해 제어되어야합니다. 스레드 안전 섹션 (http://docs.oracle.com/javase/6/docs/api/java/nio/Buffer.html)을 참조하십시오. ByteBuffer는 Buffer 클래스의 하위 클래스이므로 동일한 스레드 안전 문제가 있습니다.

공유 메모리 시스템에서 메모리 매핑 된 파일의 사용을 확장하려는 시도는 저에게 매우 의심스러워 보입니다. 메모리 매핑 된 파일의 사용은 성능을위한 것입니다. 공유 시스템에 들어가면 성과를 찾는 것이 우선 순위를 낮추는 것이 중요합니다. 아니, 당신은 느린 시스템을 찾아야하지만 처음에는 간단하게 작동하도록하는 다른 많은 문제가 처음 (그리고 유일한) 우선 순위에 있어야합니다. 마지막에 메모리 매핑을 사용하여 데이터 파일에 대한 동시 액세스를 다른 것으로 대체해야하는 경우 나는 놀라지 않을 것입니다.

교환기 사용과 같은 몇 가지 아이디어는 Can multiple threads see writes on a direct mapped ByteBuffer in Java?Options to make Java's ByteBuffer thread safe을 참조하십시오.

관련 문제