傳統的 unix 系統實現在核心中都設有緩衝區快取記憶體或頁快取記憶體,大多數磁碟 i/o 都通過緩衝區進行。當向檔案寫入資料時,核心通常首先將資料複製到緩衝區中,然後排入佇列,晚些時候再寫入磁碟。這種方式被稱為「延遲寫(delayed write)」。
通常,當核心需要重用緩衝區來存放其他磁碟塊資料時,它會把所有延遲寫資料塊寫入磁碟。為了保證磁碟上實際檔案系統與緩衝區中內容的一致性,unix 系統提供了 sync、fsync 和fdatasync 三個函式。
#include
int fsync(int fd);
int fdatasync(int fd);
/* 返回值:若成功,返回0;否則,返回 -1 */
void sync(void);
sync 只是將所有修改過的塊緩衝區排入寫佇列,然後就返回,並不等待實際寫磁碟操作結束。通常,稱為 update 的系統守護程序周期性地呼叫(一般每隔 30 秒)sync 函式,這就保證了定期沖洗(flush)核心的塊緩衝區。unix 命令 sync(1) 也呼叫 sync 函式。
fsync 函式只對由檔案描述符 fd 指定的乙個檔案起作用,並且等待寫磁碟操作結束才返回。fsync 可用於資料庫這樣的應用程式,這種程式需要確保修改過的塊立即寫到磁碟上。
fdatasync 類似於 fsync,但它只影響檔案的資料部分。而除資料外,fsync 還會同步更新檔案的屬性。
純函式,快取函式
不純的函式具有 下面以之前的計稅函式以例進行說明 var percentvalue 5 var calculatetax value 複製 這個函式不是純函式,主要因為它以來外部環境計算其邏輯,當外部環境改變時,它會影響結果。因此,純函式的主要特徵就是不依賴於任何外部變數,也不應該改變任何外部變數。...
vue函式快取
vue.js原始碼函式快取 create a cached version of a pure function.function cached fn capitalize a string.var capitalize cached function str 函式使用了閉包特性,儲存區域性變數ca...
memoize快取函式
快取函式是指將上次的計算結果快取起來,當下次呼叫時,如果遇到相同的引數,就直接返回快取中的資料 用斐波那契數枚舉例子,不用快取函式,count被呼叫453次 var count 0 var fibonacci function n for let i 0 i 10 i console.log cou...