所謂管道的容量,指不消費(讀)的狀況下,最大能寫入的數據量。有兩種方式來測試一個管道的容量:git
1)使用阻塞寫,每次寫一個字節,並打印寫入的總字節數,最後寫入阻塞時,上次打印的就是管道的容量;github
2)使用非阻塞寫,每次也只寫一個字節,直到寫入失敗(返回-1),打印一次總的寫入量,就是管道的容量。異步
環境:CentOS 6.7測試
分別使用上述兩種方法,測得管道容量:ip
1) 3112948 字節 (<3MB)get
2)8527860 字節 (<8MB)同步
首先說明一下,系統定義的PIPE_BUF(4096)表示能夠一次寫入的最大原子數據量,並非管道容量。it
那麼問題來了,爲何同步與異步寫入,所測得的結果不同,且相差這麼大呢?pip
測試代碼ast