我有大量的气象文件,太大了,无法放入内存。
我需要执行很多并发的随机读取操作。因此,我认为SSD + mmap可以提高性能。
但是并发mmap读取呢?应该如何组织它们?
我有大量的气象文件,太大了,无法放入内存。
我需要执行很多并发的随机读取操作。因此,我认为SSD + mmap可以提高性能。
但是并发mmap读取呢?应该如何组织它们?
是否存在并发原因(线程之间共享的数据结构和资源争用),导致您希望在不同的线程中独立打开相同的文件?如果没有,那么我看不出有任何理由这样做。这只会让内核更努力地工作,因为它必须跟踪一堆不同的内存映射(每个线程一个),最终都映射到同一个对象,消耗更多的文件描述符(除非你有很多文件,否则不是大问题),并且在多次mmap同一文件时消耗更多的地址空间。
如果我理解得没错,您的情况下文件大多数时间都是被打开、读取、然后关闭,线程之间几乎没有竞争。因此,请为所有线程全局打开文件。
无论您的线程之间是否存在对打开文件的管理竞争,都有一个主要原因支持每个进程仅映射每个文件一次,那就是如果您的地址空间仅为32位。如果您处于32位模式,则如果您的文件很大并且想要mmap其中的重要部分,则地址空间是相当有限的资源。在这种情况下,您肯定需要通过不将同一文件浪费地映射到两个不同的线程中来节省地址空间。