
我必須將大量資料寫入管道。我可以使用 Linux
io_submit/io_getevents
呼叫寫入命名管道嗎?我試圖找到任何解釋 AIO 通過管道的文檔,但找不到。有人可以幫忙嗎?
我主要關心的aio_offset
是struct iocb
.如果將偏移量為 8096 的封包安排在偏移量為 4096 的封包之前進行讀取/寫入會怎樣?
答案1
Linux AIO 不僅限於常規檔案 - 它能用於區塊設備特殊文件。但我預計 AIO 寫入不能在管道上使用,因為管道無法找到。
IOCB_CMD_PWRITE
pwrite() 將從 buf 開始的緩衝區中寫入 count 個位元組到檔案描述符 fd 的偏移量 offset 處。文件偏移量未更改。
fd 引用的文件必須能夠找到。
AIO 的重點是能夠對區塊裝置的多個直接 IO 寫入(或讀取)進行排隊,而無需使用執行緒。
為了提高管道上批量傳輸的效能,我建議將管道緩衝區大小從 4kB 增加到不超過 64kB...不過 64kB 已經是現代 Linux 上的預設值。