setbuffer與檔案的快取機制

2022-07-01 20:39:09 字數 1032 閱讀 5666

背景:  都知道檔案的讀取用到了快取機制,但是有以下幾點問題卻一直沒有確切的答案:

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...