2011-04-14 117 views
1

如果我要讀取一個大文件,併發運行多個線程將運行沒有緩衝區具有更快的傳輸速度或運行OS緩衝區會更好嗎?系統緩存vs無緩存

回答

2

您不應該有多個線程同時讀取同一個文件,使用一個線程讀取數據,然後以某種方式將數據發送給其他人。也就是說,使用緩衝區讀取會更快,但標準已經使用緩衝區(如果使用fread或ifstream進行讀取,如果使用直接讀取funcion,則不會有緩衝區)。

請注意,標準緩衝區將知道磁盤扇區大小,這意味着如果直接使用read,它將減少磁盤訪問。

0

這很大程度上取決於訪問模式。考慮作爲視頻播放器的第一個例子,聲音和視頻線程。他們都需要在大致相同的位置順序訪問文件。但是,一旦它被讀取,數據就不再需要了。因此,您需要預讀緩存,但不保留舊數據。

作爲第二個示例,考慮具有基於文件的表的數據庫應用程序。多個線程可以執行獨立的查詢。不同的表格和索引之間的參考地點不同。

顯然,這些例子差別很大。對某些人來說,這表明應用程序應該管理緩存。不是真的;最好的方法是告訴操作系統你要做什麼。做一個權衡更好的位置。它可以查看到磁盤的所有流量,並找出全局RAM壓力。

因此,內存映射文件可以是一種高性能的方式,以隨機訪問的方式讀取具有多個線程的大文件。它爲OS提供了一個平衡I/O和內存的好機會。