2013-06-11 5 views
1

휘발성 변수를 통해 파일의 독자와 작가 사이의 스레드 안전성을 확보하려면 (작성자 업데이트 위치와 독자가 작성자의 위치를 ​​읽습니다.) (파일 업로드 시스템, 들어오는 파일은 스트림입니다. , 그게 중요하다면). 분명히 (스파 스 파일, 두 매핑 성장의 힘) 더 많은 트릭이 있지만, 그 모든 것들은 그 것으로 요약됩니다.자바 입출력 스레드 안전

메모리에 완전히 캐싱하지 않고 파일을 동시에 읽는 동안 파일을 쓰는 더 빠른 방법을 찾을 수 없습니다 (전단 크기로 인해 수행 할 수 없음).

독자가 작성한 바이트에 대해 동일한 프로세스 내에서 가시성을 보장하는 다른 방법이 있습니까? MappedByteBuffer는 간접적으로 Java 메모리 모델을 통해 보증을 제공하며, 다른 솔루션이 동일하게 수행 할 것으로 기대합니다 (읽기 : 비 플랫폼 특정 및 기타).

가장 빠른 방법입니까? 문서에서 뭔가를 놓치고 있습니까?

+0

직접적인 ByteBuffer 및 JMM에 관한 공식적인 보증이 있습니까? – ZhongYu

+0

zhong.j.yu, 휘발성 읽기는 적절한 메모리 장벽을 방출하고 MBB는 메모리에 직접 씁니다. 나는 공식적으로 문서화되어 있다는 것을 알지 못했지만, 핵심 규칙에서 따릅니다. – electroCutie

답변

0

꽤 괜찮은 하드웨어에 대해 몇 년 전에 테스트 한 결과, MappedByteBuffer은 다른 I/O 기술보다 약 20 % 빠릅니다. 그것은 당신이 미리 파일 크기를 알아야한다는 글쓰기의 단점을 가지고 있습니다.

+0

필자는 얇은 래퍼를 사용하여 필요에 따라 1K에서 2GB 크기의 MBB를 제공합니다. 그것은 크기를 가장 잘 추측하는 스파 스 파일로 시작합니다. (필자의 경우 올바른 추측이지만 필요하지는 않습니다) 크기를 줄입니다. 잘라 내기를위한 단일 추가 메타 데이터 쓰기 이외에 적어도 충분히 큰 용량을 추측 할 경우 불필요한 디스크 작업이 필요하지 않습니다. 너무 큰 추측에 대한 벌금은 없습니다. 치료를해라. – electroCutie