[apue] 測試管道容量的一些疑問

所謂管道的容量,指不消費(讀)的狀況下,最大能寫入的數據量。有兩種方式來測試一個管道的容量:git

1)使用阻塞寫,每次寫一個字節,並打印寫入的總字節數,最後寫入阻塞時,上次打印的就是管道的容量;github

2)使用非阻塞寫,每次也只寫一個字節,直到寫入失敗(返回-1),打印一次總的寫入量,就是管道的容量。異步

環境:CentOS 6.7測試

分別使用上述兩種方法,測得管道容量:ip

1) 3112948 字節 (<3MB)get

2)8527860 字節 (<8MB)同步

首先說明一下,系統定義的PIPE_BUF(4096)表示能夠一次寫入的最大原子數據量,並非管道容量。it

那麼問題來了,爲何同步與異步寫入,所測得的結果不同,且相差這麼大呢?pip

 

測試代碼ast

相關文章
相關標籤/搜索