
100
|
第四章
分散∕聚集 I/O
分散/聚集
(
scatter/gather
) I/O 是一種進行輸入和輸出的方法;透過此方法,單一
系統呼叫得以從緩衝區向量(a vector of buffers)寫入單一資料串流,或者從單一資料
串流讀取到緩衝區向量。這個類型的 I/O 之所以會有此名稱,是因為資料會被分散至
(scattered into)或聚集自(gathered from)特定的緩衝區向量。這種方式的輸入和輸
出又稱為向量(vectored)I/O。相對而言,第 2 章的標準讀取和寫入系統呼叫,所提供
的是線性(linear)I/O。
相較於線性 I/O 的做法,分散∕聚集 I/O 有幾項優點:
較自然的撰碼模式
如果你的資料原本就是採用分段的方式(segmented)—例如,標頭檔中預定義結構
的欄位—向量 I/O 可對其進行直覺的操作。
效率
單次向量 I/O 操作可以取代多次線性 I/O 操作。
效能
相較於線性 I/O 實作,向量 I/O 實作除了可以減少系統呼叫的次數,還可以經由內部
的優化提供效能的改善。
不可分割
不同於多次線性 I/O 操作,一個行程可以執行單次向量 I/O 操作,而不會有與另一個
行程的操作交織在一起的風險。
readv() 與 writev()
POSIX 1003.1-2001 定義了,而且 Linux 實作了,一對採用分散∕聚集 I/O 機制的系統
呼叫。Linux 的實作滿足了前一節所列示的各項目標。
readv()
函式會把
count
個區段從檔案描述器
fd
讀取到
iov ...