我有大量的气象文件。太大,无法装入 ram。
我需要执行大量并发随机读取。所以,我认为 SSD + mmap 可以提高性能。
但是并发 mmap 读取是怎么回事?他们应该如何组织?
我有大量的气象文件。太大,无法装入 ram。
我需要执行大量并发随机读取。所以,我认为 SSD + mmap 可以提高性能。
但是并发 mmap 读取是怎么回事?他们应该如何组织?
是否存在并发原因(线程之间共享数据结构和资源的争用)为什么要在不同线程中独立打开相同的文件?如果不是,那么我看不出这样做的理由。它只会使内核工作更加困难,因为它必须跟踪一堆不同的内存映射(每个线程一个),这些映射最终都映射到同一个对象,消耗更多的文件描述符(没什么大不了的,除非你有一个非常大的数字文件),并且当您多次映射相同的文件时会消耗更多的地址空间。
如果我了解在您的情况下文件大多不经常打开,阅读很多,然后不经常关闭,我认为您不会在线程之间有太多争用。因此,请为所有线程全局打开文件。
无论您是否在线程之间为打开文件的内部管理而争用,有一个最重要的原因是支持每个进程只映射每个文件一次,那就是如果您的备用地址只有 32 位。如果您处于 32 位模式,那么如果您的文件很大并且您想要映射其中的重要部分,那么地址空间是非常有限的资源。在这种情况下,您当然需要通过在两个不同的线程中浪费地映射同一个文件两次来节省地址空间。