[apue] 测试管道容量的一些疑问

所谓管道的容量,指不消费(读)的状况下,最大能写入的数据量。有两种方式来测试一个管道的容量:git

1)使用阻塞写,每次写一个字节,并打印写入的总字节数,最后写入阻塞时,上次打印的就是管道的容量;github

2)使用非阻塞写,每次也只写一个字节,直到写入失败(返回-1),打印一次总的写入量,就是管道的容量。异步

环境:CentOS 6.7测试

分别使用上述两种方法,测得管道容量:ip

1) 3112948 字节 (<3MB)get

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

首先说明一下,系统定义的PIPE_BUF(4096)表示能够一次写入的最大原子数据量,并非管道容量。it

那么问题来了,为何同步与异步写入,所测得的结果不同,且相差这么大呢?pip

 

测试代码ast

相关文章
相关标签/搜索