将同一个文件进行多次内存映射的性能特征是什么?操作系统是否会在映射之间重复使用/缓存,还是会多次读取文件到内存的不同部分?
例如,如果我从两个不同的进程中的内存映射文件进行读写操作,它会通过磁盘还是在内存中进行通信?如果我从两个不同的进程或者线程交替地读取同一个文件的内存映射,他们会从相同的内存中读取吗?
将同一个文件进行多次内存映射的性能特征是什么?操作系统是否会在映射之间重复使用/缓存,还是会多次读取文件到内存的不同部分?
例如,如果我从两个不同的进程中的内存映射文件进行读写操作,它会通过磁盘还是在内存中进行通信?如果我从两个不同的进程或者线程交替地读取同一个文件的内存映射,他们会从相同的内存中读取吗?
MAP_PRIVATE
来获取底层文件的私有写时复制映射。您可以使用MAP_SHARED
来获取底层文件的视图。我不知道如果您同时在MAP_PRIVATE
映射和MAP_SHARED
映射中映射相同的区域会发生什么,但我怀疑对任一映射的写入都会导致复制。msync
。在大多数系统上,多个MAP_SHARED
映射将为您提供一块内存,名义上由磁盘支持,可在进程间共享。我不确定这种行为是指定的还是典型实现的愉快结果。