内存映射文件如何在多进程方案中工作?

时间:2018-02-05 23:55:46

标签: java memory memory-mapped-files filechannel mappedbytebuffer

这个问题让我困惑了好几天:

假设我有两个在同一台机器上运行的进程(p_writep_read)。

  • 流程p_write用于编写/更新mmap文件。

  • 进程p_read用于使用mmap文件,换句话说,就是阅读 来自mmap文件。

我的假设是p_write需要首先为mmap文件分配一个内存空间(堆外)(空间使用Java MappedByteBuffer API自动映射到文件)。 / p>

我的问题是 p_read如何从mmap文件读取?我现在的假设是p_read还需要为mmap文件分配另一个相同大小的堆外空间映射到,但这似乎不正确,因为在这种情况下需要将内存量加倍。

如果p_read不需要为要映射到的mmap文件分配单独的内存空间,那么p_read如何通过{{1}知道文件映射到的正确内存地址}?

更新1

我找到了一个更好的问题,或者你可以将其视为一个后续问题: 如果p_write被调用两次,那么同一个文件会被映射两次到两个不同的内存空间吗?

FileChannel.map()

// Scenario A: In single process

try (FileChannel fc = FileChannel.open(filePath, openOptions)) {
   // First call
   fc.map(MapMode.READ_ONLY, 0, SIZE_CONSTANT);
   // Second call
   fc.map(MapMode.READ_ONLY, 0, SIZE_CONSTANT);
}

对于这两种情况,如果它们都映射到一个相同的内存空间,也许这并不重要吗?

0 个答案:

没有答案