管道是有大小的。超过大小,写就会阻塞。经过ulimit -a查看到 pipe size 一次原子写入为:512Bytes8=4096Bytes 查看缓冲条目个数:cat /usr/src/kernels/3.10.0-327.el7.x86_64/include/linux/pipe_fs_i.h文件 因此pipe缓冲大小为:164096=65536Bytes,也就验证了man 7 pipe下的pipe capacityhtml
由于PipeInputStream不使用系统调用,不须要用户态转到内核态。所以不一样线程之间通信,相同缓冲区大小,持续读/写(边写边读,不让缓冲区堆满)的条件下的性能来讲:PipeInputStream更高。linux
可是上面的对比并无意义。应该针对使用场景进行比较。PipeInputStream是BIO阻塞IO;pipe能够为非阻塞并与Selector多了复用器一块儿使用,也就是一个线程能够处理多个chanel的就绪事件,能够充分利用CPU。性能