NIO-概覽




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的文件鎖可以實現文件的獨占或共享。

參考文檔

  1. 解鎖網絡編程之NIO的前世今生
  2. 史上最強Java NIO入門:擔心從入門到放棄的,請讀這篇!
  3. Java NIO系列教程

20191127212134.png
微信掃一掃二維碼關注訂閱號傑哥技術分享
出處:https://www.cnblogs.com/Jack-Blog/p/11991240.html
作者:傑哥很忙
本文使用「CC BY 4.0」創作共享協議。歡迎轉載,請在明顯位置給出出處及鏈接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM