我有一個商店,如以下使用FREAD有效地讀取數據稀疏
A1 B1 C1 ... A2 B2 C2 ... .... An Bn Cn ...
數據的文件在這裏艾,Bi和詞與16個字節的塊。每個塊Ai Bi Ci ...可能大於1M,n可能是256.我想依次讀A1,A2 ... An,然後B1,B2 ... Bn ...
如果我使用fread A1,fseek到A2,fread A2,...,我猜測它浪費了很多IO帶寬。 fread可以在每次調用時從磁盤讀取4k字節,在執行完fseek之後,最後一個fread的緩存數據可能會丟失。讀取完所有的As後,讀取B1需要直接從磁盤讀取,而不是緩存。
這個假設是否正確?我不確定文件系統是否可以很智能,並且仍然使用B1來保存緩存。如果文件系統無法幫助解決這個問題,我可能不得不將myfread作爲fread的包裝器,但將256 * 4k數據緩存在我自己的緩衝區中,因此下一輪讀取Bs可以更快。 myfread從緩衝區中讀取,直到它達到4k,然後它需要fread真實的數據。但我知道fread不是一個簡單的API,myfread可以是一個簡單的實現嗎?我需要考慮文件系統的一致性嗎?就我而言,我知道沒有人在閱讀時寫下這些文件。