背景: 都知道檔案的讀取用到了快取機制,但是有以下幾點問題卻一直沒有確切的答案:
1. 快取機制到底是什麼機制。
2. 讀取檔案i/o的過程到底是怎樣的,多執行緒併發讀取一二檔案是否會有速度上的提公升。
參考:無快取io運算元據流向路徑:資料——核心快取區——磁碟
標準io運算元據流向路徑:資料——流快取區——核心快取區——磁碟
總結如下:
所謂帶不帶緩衝,指的是在呼叫系統呼叫如write或read時是否有使用者級的緩衝。標準函式fread和fwrite會為使用者定製緩衝區,這個緩衝區的大小控制了呼叫系統函式的節奏。
首先要明白不帶緩衝的概念:所謂不帶緩衝,並不是指核心不提供緩衝,而是只單純的系統呼叫,不是函式庫的呼叫。系統核心對磁碟的讀寫都會提供乙個塊緩衝(在有些地方也被稱為核心快取記憶體),當用write函式對其寫資料時,直接呼叫系統呼叫,將資料寫入到塊緩衝進行排隊,當塊緩衝達到一定的量時,才會把資料寫入磁碟。因此所謂的不帶緩衝的i/o是指程序不提供緩衝功能(但核心還是提供緩衝的)。每呼叫一次write或read函式,直接系統呼叫。
而帶緩衝的i/o是指程序對輸入輸出流進行了改進,提供了乙個流緩衝,當用fwrite函式網磁碟寫資料時,先把資料寫入流緩衝區中,當達到一定條件,比如流緩衝區滿了,或重新整理流緩衝,這時候才會把資料一次送往核心提供的塊緩衝,再經塊緩衝寫入磁碟。(雙重緩衝)
因此,帶緩衝的i/o在往磁碟寫入相同的資料量時,會比不帶緩衝的i/o呼叫系統呼叫的次數要少。
問題2 : 參考:
讀取磁碟的效能取決於磁碟的使用時間,比如乙個磁碟如果一直處於讀取狀態,那麼你再多的執行緒也沒有用。
系統匯流排也是不支援並行的,再多的執行緒匯流排上的資料也得乙個乙個來。
PHP Cache快取機制與檔案快取原理
php cache快取機制與檔案快取原理,使用 pear 中的 cache 可以將內容快取於檔案,資料庫或者記憶體中,以檔案為例。沒有使用快取 pear content cache1.php php echo 這是內容。p echo 當前時間是 date m d y h i s a time br ...
Linux檔案讀寫與快取
題外話 每日七點,qq qq群號 630300475 正題 發自 快取 快取是用來減少高速裝置訪問低速裝置所需平均時間的元件,檔案讀寫涉及到計算機記憶體和磁碟,記憶體操作速度遠遠大於磁碟,如果每次呼叫read,write都去直接操作磁碟,一方面速度會被限制,一方面也會降低磁碟使用壽命,因此不管是對磁...
檔案快取 寫與讀
1.先判斷是否有sdcard以及許可權environment.getexternalstoragestate equals environment.media mounted 2.得到sdcard路徑 mnt sdcard environment.getexternalstoragedirector...