NIO-概覽
NIO-Buffer
NIO-Channel
NIO-Channel接口分析java
原本是想學習Netty的,可是Netty是一個NIO框架,所以在學習netty以前,仍是先梳理一下NIO的知識。經過剖析源碼理解NIO的設計原理。編程
本系列文章針對的是JDK1.8.0.161的源碼。微信
NIO又叫Non-blocking I/O或New I/O;全新的輸入輸出標準庫。網絡
關於I/O訪問方式和I/O模型能夠在《高性能網絡通信原理》瞭解一下。併發
Java NIO是Java 1.4版加入的新特性,NIO彌補了原來的阻塞I/O的不足。
NIO引入了通道、緩衝區、選擇器三個核心組件。經過這三個組件對文件,網絡進行讀寫。框架
通道是對原I/O包中的流的模擬。與文件設備交互的全部數據都必須經過一個Channel對象,
好比讀寫文件流就須要建立一個FileChannel
對象,而讀寫網絡流則須要建立SocketChannel
對象。性能
傳統的IO API是面向字節流的,而在NIO中引入了Buffer(緩衝區),Buffer則和Channel進行數據交互。咱們則從Buffer讀寫數據。學習
傳統的阻塞I/O 每個網絡鏈接都須要一個線程讀寫網絡流,併發量增高會產生大量的線程上下文切換,存在性能瓶頸。而NIO則可使用一個線程接收客戶端鏈接,經過少許的幾個線程作讀寫操做。這樣極大的減小了線程數量從而提升了性能。經過選擇器告知哪些I/O就緒,並且咱們能夠經過不一樣的選擇器實現不一樣的策略,而不影響其餘模塊,實現解耦。.net
NIO經過引入Pipe(管道)實現單向通信
NIO的文件鎖能夠實現文件的獨佔或共享。
微信掃一掃二維碼關注訂閱號傑哥技術分享
出處:http://www.javashuo.com/article/p-dmxplcrn-ex.html 做者:傑哥很忙 本文使用「CC BY 4.0」創做共享協議。歡迎轉載,請在明顯位置給出出處及連接。