假設我在磁盤上有一個大文件(或者只是原始存儲,如果這在任何流行的操作系統中都是可行的),我將需要操作它。有沒有辦法讓操作系統知道,我希望整個數據塊都被急切地加載到內存中,而不是每次嘗試訪問一個段時都只有一小塊最初加載到內存和頁面錯誤中的內容尚未加載到內存中?我認爲這對於內存映射文件來說可能更多,因爲如果您正在進行順序讀取操作系統,可能已經預先加載了一些東西。我確信編寫一個提供我所需功能的操作系統在技術上是可行的,但它是否存在於任何流行的操作系統中?另外,如果有額外的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內核默認情況下會加載。我只是沒有看到其他流行的操作系統不會這樣做的原因。 –