NIO-概覽



NIO-概覽

目錄

NIO-概覽
NIO-Buffer
NIO-Channel
NIO-Channel接口分析java

前言

原本是想學習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就緒,並且咱們能夠經過不一樣的選擇器實現不一樣的策略,而不影響其餘模塊,實現解耦。.net

其餘

管道

NIO經過引入Pipe(管道)實現單向通信

FileLock

NIO的文件鎖能夠實現文件的獨佔或共享。

參考文檔

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

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

相關文章
相關標籤/搜索