假设我在磁盘上有一个大文件(或者只是原始存储,如果这在任何流行的操作系统中都是可行的),我将需要操作它。有没有办法让操作系统知道,我希望整个数据块都被急切地加载到内存中,而不是每次尝试访问一个段时都只有一小块最初加载到内存和页面错误中的内容尚未加载到内存中?我认为这对于内存映射文件来说可能更多,因为如果您正在进行顺序读取操作系统,可能已经预先加载了一些东西。我确信编写一个提供我所需功能的操作系统在技术上是可行的,但它是否存在于任何流行的操作系统中?另外,如果有额外的RAM可用,大多数操作系统是否已经预先将整个块预加载到内存中?如果操作系统提供此功能,那么访问此功能的编程语言支持是什么?多次从磁盘加载到内存而不是页错误
0
A
回答
0
正如评论员指出的那样,对于连续读取的情况,现代操作系统已经执行了一个预读优化,可以为您做到这一点。
对于其他类型的输入,您可以使用异步I/O。
如果你的程序知道它将来需要一些读取数据,但不需要立即它,它会发送一个异步输入数据的请求。
当程序前进到需要该数据的位置时,它检查异步请求的状态。
如果请求已满足,优化工作,并且程序可以处理所请求的数据而不会阻塞。
如果请求尚未得到满足,程序将阻塞,直到数据准备就绪。虽然程序仍然需要阻塞这种情况,但它被阻塞的时间长度将小于同步I/O的情况。
相关问题
- 1. 从内存而不是磁盘读取文件
- 2. 熊猫PySpark给OOM错误,而不是溢出到磁盘
- 3. 从磁盘加载程序
- 4. AVAudioPlayer是从磁盘流式传输文件,还是一次加载到内存中?
- 5. Android多次重新加载后内存不足错误
- 6. CreateDibSection在磁盘而不是物理内存
- 7. 内存中的HTTP BODY而不是写入磁盘
- 8. 内存中的XML文件而不是磁盘上的文件
- 9. 将XML写入内存而不是磁盘
- 10. 下载工作簿而不将其保存到磁盘中rubyxl
- 11. 使用Android Picasso预加载图像到内存/磁盘
- 12. 需要从内存,而不是从磁盘模块 - 这可能吗?
- 13. 从内存而不是从磁盘使用UIWebView中的@ font-face访问字体
- 14. Django的render_to_response缓存是否展示模板或每次从磁盘加载?
- 15. 从存储器到磁盘
- 16. 毕加索内存/磁盘缓存
- 17. 从磁盘加载的Python字典在内存中占用太多空间
- 18. 酸洗数据帧到磁盘时出现内存错误
- 19. 写入文件到服务器磁盘,而不是下载
- 20. php:将磁盘映像从磁盘传输到缓冲区,而不会在内存中完全读取它
- 21. 在内存中保存的对象,而从磁盘
- 22. c#Interop.Word加入两个WordDocument而不保存到磁盘
- 23. MySql不保存到磁盘
- 24. UIManagedDocument不保存到磁盘
- 25. 使用pymongo加载和保存mongoDB数据库从/到磁盘
- 26. 将映像缓存到Azure CDN而不是磁盘
- 27. 立即下载新创建的文件,而不是保存到磁盘
- 28. Flash + IE9 +'不要将加密页面保存到磁盘'选中
- 29. SVN加载的磁盘有多大
- 30. Rails“加载更多...”而不是分页
如果您在文件中处理数据严格顺序,则很容易使你能保持你自己的“块”预读缓冲区。另外,大多数现代操作系统可能会进行一些内部预读,只是因为这种模式非常普遍。我认为你必须做一些分析和测量,以查看瓶颈是什么,并比较不同的方法(你在做预读,依靠操作系统,[内存映射整个或部分文件](https:// en.wikipedia.org/wiki/Memory-mapped_file),其他方法)。 –
根据[这个(旧的但可能仍然相关)的Linux页面缓存教程](http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files/ ),至少Linux内核默认情况下会加载。我只是没有看到其他流行的操作系统不会这样做的原因。 –