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線程

相關文章
相關標籤/搜索