2011-03-30 37 views
5

我讀過mmap比fileinput更有優勢,因爲它會將頁面讀入內核pagecache並在用戶地址空間中共享頁面。而fileinput實際上會將頁面帶入內核,並將行復制到用戶地址空間。所以,fileinput有額外的空間開銷。mmap vs fileinput的優點

因此,我打算遷移到mmap,但我想從高級python黑客知道它是否會提高性能?

如果是這樣,是否有使用mmap的fileinput的類似實現?

如果您知道的話,請指點我的任何開源代碼。

謝謝

回答

1

MMAP需要一個文件,並把它插在RAM中,這樣你可以索引它像一個字節數組或者作爲一個大的數據結構。

如果您以「隨機訪問」方式訪問文件,這會執行很多fseek(),fread(),fwrite()組合。

但是,如果您只是讀取文件並處理每一行一次(說),那麼它不可能明顯更快。實際上,對於任何合理的文件大小(記住使用mmap都必須適合內存 - 或者發生分頁開始降低mmap的效率),它可能是無法區分的。

+9

這是不正確的。 mmap:ed文件不需要放入RAM中 - 它們需要適合進程地址空間。可用的地址空間對於32位處理爲2-3 GB,對於64位處理非常大,與機器中實際的RAM數量無關。在一個64位的Python上,mmap一個100 GB的文件是完全合理的! – 2011-03-31 22:29:10

+1

Baffe,沒錯,你是對的,我的意思是「這一切都必須適合內存,以避免你首先使用mmap避免的低效率」。這當然有點簡化,但請合理我在這裏給經驗法則不是一個關於算法中的本地化分析的完整論文 – AndrewStone 2011-04-01 00:12:57

+3

我不太確定你的意思是什麼效率低下。 mmap:文件不會從磁盤讀取整個文件。只讀取您從mmap返回的對象實際訪問的文件部分。 – 2011-04-01 23:21:46