NIO-概覽
目錄
NIO-概覽
NIO-Buffer
NIO-Channel
NIO-Channel接口分析
NIO-SocketChannel源碼分析
NIO-FileChannel源碼分析
NIO-Selector源碼分析
NIO-WindowsSelectorImpl源碼分析
NIO-EPollSelectorIpml源碼分析
前言
本來是想學習Netty的,但是Netty是一個NIO框架,因此在學習netty之前,還是先梳理一下NIO的知識。通過剖析源碼理解NIO的設計原理。
本系列文章針對的是JDK1.8.0.161的源碼。
什么是NIO
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就緒,而且我們可以通過不同的選擇器實現不同的策略,而不影響其他模塊,實現解耦。
其他
管道
NIO通過引入Pipe(管道)實現單向通訊
FileLock
NIO的文件鎖可以實現文件的獨占或共享。
參考文檔
微信掃一掃二維碼關注訂閱號傑哥技術分享
出處:https://www.cnblogs.com/Jack-Blog/p/11991240.html
作者:傑哥很忙
本文使用「CC BY 4.0」創作共享協議。歡迎轉載,請在明顯位置給出出處及鏈接。