NIO pipe 与 PipeInputStream

  1. Nio的pipe使用Linux的pipe实现。须要调用系统调用。

管道是有大小的。超过大小,写就会阻塞。经过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

  1. PipeInputStream 内部使用默认大小为1024字节的缓冲区。没有系统调用。

由于PipeInputStream不使用系统调用,不须要用户态转到内核态。所以不一样线程之间通信,相同缓冲区大小,持续读/写(边写边读,不让缓冲区堆满)的条件下的性能来讲:PipeInputStream更高。linux

可是上面的对比并无意义。应该针对使用场景进行比较。PipeInputStream是BIO阻塞IO;pipe能够为非阻塞并与Selector多了复用器一块儿使用,也就是一个线程能够处理多个chanel的就绪事件,能够充分利用CPU。性能

美团NIO浅析:https://tech.meituan.com/2016/11/04/nio.html线程

相关文章
相关标签/搜索