是I/O 函式分為“帶緩衝”的和“不帶緩衝”的兩類。
帶緩衝的 I/O 函式寫資料時,並不直接寫磁碟介質,而是將資料先寫到這塊記憶體緩衝中,之後使用者空間緩衝中的資料會被傳送到系統緩衝中。
linux 核心會將系統緩衝中的資料送完磁碟驅動器(fsync函式可以加速這一過程),這之後,資料才真正的被寫入磁碟。
因為目前記憶體的讀寫速度往往遠大於硬碟的讀寫速度(常 ms 級)。因此,緩衝區的建立可以盡力避免太過頻繁的寫磁碟。
對於硬碟來說,寫入一個位元組可能跟寫入一個扇區沒什麼兩樣,程式設計師每次寫入的資料也許就幾個位元組,所以可以將每次寫入的幾個位元組放入緩衝區,排列組合成一整塊資料再寫入,也能極大的提升效率。
擴充套件資料
1、帶緩衝的 I/O 讀函式讀取資料之前,則會首先判斷使用者空間的程序緩衝區是否包含資料,如果沒有,則繼續判斷系統緩衝區是否包含資料。
2、“帶緩衝”的 I/O 讀函式從磁碟讀取資料時,並不只讀取呼叫者指定的讀取位元組數。讀函式可能一次性讀取一個扇區(常常是 512B)儲存在緩衝區裡,只返回給程式設計師需要的 10 位元組。
是I/O 函式分為“帶緩衝”的和“不帶緩衝”的兩類。
帶緩衝的 I/O 函式寫資料時,並不直接寫磁碟介質,而是將資料先寫到這塊記憶體緩衝中,之後使用者空間緩衝中的資料會被傳送到系統緩衝中。
linux 核心會將系統緩衝中的資料送完磁碟驅動器(fsync函式可以加速這一過程),這之後,資料才真正的被寫入磁碟。
因為目前記憶體的讀寫速度往往遠大於硬碟的讀寫速度(常 ms 級)。因此,緩衝區的建立可以盡力避免太過頻繁的寫磁碟。
對於硬碟來說,寫入一個位元組可能跟寫入一個扇區沒什麼兩樣,程式設計師每次寫入的資料也許就幾個位元組,所以可以將每次寫入的幾個位元組放入緩衝區,排列組合成一整塊資料再寫入,也能極大的提升效率。
擴充套件資料
1、帶緩衝的 I/O 讀函式讀取資料之前,則會首先判斷使用者空間的程序緩衝區是否包含資料,如果沒有,則繼續判斷系統緩衝區是否包含資料。
2、“帶緩衝”的 I/O 讀函式從磁碟讀取資料時,並不只讀取呼叫者指定的讀取位元組數。讀函式可能一次性讀取一個扇區(常常是 512B)儲存在緩衝區裡,只返回給程式設計師需要的 10 位元組。