[TOC]
> ### `IO`模型
* 1、**阻塞式 IO`**
* 客戶端發起了`connect`請求,那么當前線程就會休眠,阻塞在調用處,等待服務端響應完畢,返回消息,才會繼續執行下去。

* 2、**非阻塞式 IO**
* 客戶端程序會不停地去嘗試讀取數據,但是不會阻塞在調用讀的方法處,如果讀的時候,沒有讀到內容,也會立即返回。

* 3、**IO多路復用**
* 最常用的`I/O`事件通知機制就是`I/O`復用(I/O multiplexing)。Linux 環境中使用`select/poll/epoll_wait `實現`I/O`復用。

<br/>
> ### `NIO`
* 非阻塞同步
* `channel`通道,與傳統`IO`中的流(Stream)類似,但通道是雙向的,而`Stream`是單向的,輸入流只負責輸入,輸出流只負責輸出。唯一能與通道交互的組件是緩沖器(Buffer),通過通道,可以從緩沖器中讀寫數據。用戶可以通過選擇器`Selector`管理通道`Channel`,如可在一個選擇器上注冊多個通道,然后通過這個選擇器來管理多個通道的讀寫操作。
* `Buffer`緩沖器
* `Selector`選擇器
<br/>
> ### `IO`與`NIO`的區別
* `IO`是面向流`Stream`,`NIO`是面向緩沖區`Buffer`。
*
| BIO | NIO |
| --- | --- |
|一個連接對應一個線程|一個連接的有效請求對應一個線程|
| `IO`面向流(Stream),只能順序的從流中讀取數據,如果想跳躍性的讀取或再讀取已經讀過的內容,就必須把流中讀到的數據緩存起來| `NIO`面向緩存(Buffer),而不是面向流操作,所以可以跳躍讀取或者反復讀取 ||| |
| `IO`是阻塞的,如調用`InputStreram.read()`方法時,它會一直等到數據到來時(或超時)才會繼續執行后續代碼,否則就會一直等待| 讀寫操作具有非阻塞性,如從某通道讀取數據時,僅能得到當前可用數據,如果當前沒有數據,就什么都不會讀取,而且代碼能繼續執行。非阻塞寫也是如此。
| | `NIO`的`selectors`組件允許一個線程(即一個Java類)監控多個來源(channels),也就是說通過一個線程管理多個輸入和輸出通道。
<br/>
<br/>
***
參考:
[Java NIO系列教程(一) Java NIO 概述](https://www.cnblogs.com/duanxz/p/6759689.html)
[BIO與NIO、AIO的區別](https://blog.csdn.net/skiof007/article/details/52873421)
[如何學習Java的NIO](https://www.zhihu.com/question/29005375/answer/184849551)
[NIO原理詳解](https://blog.csdn.net/charjay_lin/article/details/81810922)
- asD
- Java
- Java基礎
- Java編譯器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞隊列
- java語法
- String.format()
- JVM
- JVM內存、對象、類
- JVM GC
- JVM監控
- 多線程
- 基礎概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 線程池
- Spring
- IOC
- 特性介紹
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring處理請求的過程
- 注解
- 微服務
- 服務注冊與發現
- etcd
- zk
- 大數據
- Java_spark
- 基礎知識
- Thrift
- hdfs
- 計算機網絡
- OSI七層模型
- HTTP
- SSL
- 數據庫
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 數據結構/算法
- 排序算法
- 快排
- 插入排序
- 歸并排序
- 堆排序
- 計算時間復雜度
- leetcode
- LRU緩存
- B/B+ 樹
- 跳躍表
- 設計模式
- 單例模式
- 裝飾者模式
- 工廠模式
- 運維
- git
- 前端
- thymeleaf
- 其他
- 代碼規范
- work_project
- Interview