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