## 1. BIO、NIO和AIO的區別?
BIO:Blocking IO,阻塞IO,java.io包下的各種流都是BIO的。BIO的交互方式是同步和阻塞的,一個線程在進行讀寫操作的時候就得一直阻塞到讀寫操作完成才能繼續運行,這個時候CPU就有大量的空閑時間(IO比較慢),嚴重影響系統的性能。
NIO:Non-blocking IO,非阻塞IO,JDK 1.4之后引入java.nio包,提供了Channel、Selector、Buffer等新的抽象結構,可以構建多路復用的、同步非阻塞的IO程序,性能更加高。
AIO:異步IO,JDK 1.7之后引入,NIO的升級版本,提供了異步非阻塞的IO操作方式,異步IO是基于事件和回調機制實現的,應用操作后會直接返回,不會阻塞在那里。當事件真正發生的時候就會調用回調函數通知主線程。
BIO面向流通信,NIO面向Channel通信。都可以是雙工的,并不是說Stream是單工的。
## 2. NIO的組成?
NIO主要有Channel、Selector、Buffer組成。
Buffer是一個緩沖區,可以在JVM heap內分配,或者在直接內存中分配,在直接內存中分配性能更加高。
Channel表示連接的通道,是雙向的,可讀可寫,不能直接訪問數據,只能與Buffer進行交互。
Selector多路復用器,可以使得一個線程單獨管理多個Channel,通過事件的機制,可以使得Selector監控多種事件的發生,并當事件發生時交由對應注冊的Channel處理。
Pipeline管道,兩個線程之間的單線數據連接。
## 3. Netty特點
1. 高性能、異步事件驅動的NIO框架。
2. 避免epoll空輪詢造成CPU 100%運行。
3. 使用更加高效的ByteBuf替代JDK的ByteBuffer,同時采用池化技術使得ByteBuf能夠重用,充分利用內存。對于ByteBuf的回收不再需要JDK的垃圾回收,而是采用自定義的引用計數的方式進行回收。
4. 提供了對TCP傳輸的粘包和半包問題的各種解決方案,例如基于分割符(**DelimiterBasedFrameDecoder**)的、基于固定長度的(**FixedLengthFrameDecoder**)和基于預設長度(**LengthFieldBasedFrameDecoder**)的各種類。
## 4. Netty的線程模型?
Netty通過Reactor模型基于多路復用器接收并處理用戶請求,其內部實現了兩個線程池(其實是EventLoop = 單線程的線程池 + Selector):Boss線程池和Worker線程池。其中Boss線程池中的線程負責處理accept事件,而worker線程池中的線程負責處理read和writer事件,并將對應的事件交由Handler處理。
- 第一章 Java基礎
- ThreadLocal
- Java異常體系
- Java集合框架
- List接口及其實現類
- Queue接口及其實現類
- Set接口及其實現類
- Map接口及其實現類
- JDK1.8新特性
- Lambda表達式
- 常用函數式接口
- stream流
- 面試
- 第二章 Java虛擬機
- 第一節、運行時數據區
- 第二節、垃圾回收
- 第三節、類加載機制
- 第四節、類文件與字節碼指令
- 第五節、語法糖
- 第六節、運行期優化
- 面試常見問題
- 第三章 并發編程
- 第一節、Java中的線程
- 第二節、Java中的鎖
- 第三節、線程池
- 第四節、并發工具類
- AQS
- 第四章 網絡編程
- WebSocket協議
- Netty
- Netty入門
- Netty-自定義協議
- 面試題
- IO
- 網絡IO模型
- 第五章 操作系統
- IO
- 文件系統的相關概念
- Java幾種文件讀寫方式性能對比
- Socket
- 內存管理
- 進程、線程、協程
- IO模型的演化過程
- 第六章 計算機網絡
- 第七章 消息隊列
- RabbitMQ
- 第八章 開發框架
- Spring
- Spring事務
- Spring MVC
- Spring Boot
- Mybatis
- Mybatis-Plus
- Shiro
- 第九章 數據庫
- Mysql
- Mysql中的索引
- Mysql中的鎖
- 面試常見問題
- Mysql中的日志
- InnoDB存儲引擎
- 事務
- Redis
- redis的數據類型
- redis數據結構
- Redis主從復制
- 哨兵模式
- 面試題
- Spring Boot整合Lettuce+Redisson實現布隆過濾器
- 集群
- Redis網絡IO模型
- 第十章 設計模式
- 設計模式-七大原則
- 設計模式-單例模式
- 設計模式-備忘錄模式
- 設計模式-原型模式
- 設計模式-責任鏈模式
- 設計模式-過濾模式
- 設計模式-觀察者模式
- 設計模式-工廠方法模式
- 設計模式-抽象工廠模式
- 設計模式-代理模式
- 第十一章 后端開發常用工具、庫
- Docker
- Docker安裝Mysql
- 第十二章 中間件
- ZooKeeper