學習書籍:Netty權威指南
多種IO方式的比較:
1、BIO(同步阻塞IO)
使用ServerSocket綁定IP地址和監聽端口,客戶端發起連接,通過三次握手建立連接,用socket來進行通信,通過輸入輸出流的方式來進行同步阻塞的通信
每次客戶端發起連接請求,都會啟動一個線程
線程數量:客戶端並發訪問數為1:1,由於線程是JAVA虛擬機中非常寶貴的資源,一旦線程數急劇增加,系統性能會急劇下降,導致線程棧溢出,創建新的線程失敗,並最終導致宕機
所以在JDK1.4之前,人們想到了一種方法,即PIO方式
2、PIO(偽異步阻塞IO)
使用線程池來處理客戶端的請求
客戶端個數:線程池最大線程數=M:N,其中M遠大於N
在read和write的時候,還是IO阻塞的,只是把每個線程交由線程池來控制管理
3、NIO(異步阻塞IO)
用NIO方式處理IO
使用多路復用器Selector來輪詢每個通道Channel,當通道中有事件時就通知處理,不會阻塞
使用相當復雜
4、AIO(真正的異步非阻塞IO)
NIO2.0引入了新的異步通道的概念,不需要使用多路復用器(Selector)對注冊通道進行輪詢即可實現異步讀寫,從而簡化了NIO編程模型
使用Netty框架進行編程步驟
1、構建事件處理池
2、使用引導程序關聯事件處理池、通道、事件處理器
3、綁定端口服務
4、等待操作完成
5、關閉事件處理池
幾種IO的功能和特性對比
按照書上的例子碼了一遍:
服務端:
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
i