2017-12-30 134 views
0

StandardOpenOption.SYNC가 MappedByteBuffers와 함께 작동하고 MappedByteBuffer.force()를 호출하여 저장하지 않습니까?기본 채널이 StandardOpenOption.SYNC로 열릴 때 MappedByteBuffer를 플러시해야합니까?

Set<OpenOption> options = new HashSet<>(); 
options.add(StandardOpenOption.READ); 
options.add(StandardOpenOption.WRITE); 
options.add(StandardOpenOption.CREATE); 
options.add(StandardOpenOption.SYNC); 

FileChannel channel = FileChannel.open("file.tmp", options); 
MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_WRITE, 0, channel.size()); 

buf.putInt(500); 
buf.force(); // Needed or not? 

편집 :

내가 JDK 그래서 리눅스 세계에이 질문을 확장, O_SYNC 플래그와의 mmap() 호출을 사용 가정 : 우리가 msync() 할 때 FD는 O_SYNC 플래그 열립니다 기본 전화해야합니까?

+0

SYNC 옵션은'write()'호출에만 적용됩니다. – EJP

+0

그래, 그런 식으로 나타나지만 확인할 수있는 문서를 찾지 못했습니다. ( – vkx

+0

mmap force/msync 성능은 O_SYNC와 거의 같지만 Linux에서는 쓰기가 가능하지만 mmap/msync와 동일한 방법으로 30-40x 느려지므로 원하는 이유가 있습니다. 그것이 우리를 구할지를 아는 것 – vkx

답변

0

확인을 위해 문서를 찾을 수 없습니다.

SYNC 옵션이 있거나없는 Linux/Windows에서 테스트되었으므로 성능이 비슷하므로 파일 옵션 SYNC/O_SYNC가 mmap/MappedByteBuffer 작업에는 적용되지 않는다고 가정합니다.