1.NIO是非阻塞IO沈贝,相對于傳統(tǒng)的IO而言杠人,解決了兩個問題:
????????1)讀寫操作不再被同步阻塞
????????2)一個服務(wù)端在某個時刻只能接收一個客戶端的接入勋乾,通過啟動新線程來提高接入會帶來線程過載問題
2.NIO和普通IO的區(qū)別
傳統(tǒng)的Socket通信方式如下:
????????1)接收連接宋下;
????????2)讀取請求消息,進行業(yè)務(wù)處理辑莫;
????????3)返回響應(yīng)給客戶端
以上三種操作全部為同步阻塞学歧,在業(yè)務(wù)量大的情況下,一旦業(yè)務(wù)處理速度變慢各吨,服務(wù)端返回給客戶端的響應(yīng)將明顯下降枝笨,系統(tǒng)的吞吐量也嚴重下降。通常的做法是擴充服務(wù)端的線程揭蜒,同時啟動多個監(jiān)聽線程來并行處理客戶端的接入横浑,但是這樣帶來的一個副作用是線程數(shù)量將迅速增加,資源的損耗將進一步加劇屉更。
NIO通信的原理如下:NIO采用了Reactor模式(類似于觀察者模式徙融,不同之處在于Reactor模式可以監(jiān)聽多個主題),通過一個多路復(fù)用器來監(jiān)聽多個客戶端的網(wǎng)絡(luò)句柄瑰谜,一旦監(jiān)聽到客戶端的請求消息欺冀,將對應(yīng)的請求消息轉(zhuǎn)發(fā)給對應(yīng)的Handler(業(yè)務(wù)處理類),讀和寫本身并不阻塞線程萨脑,如果沒有請求消息隐轩,多路復(fù)用器會阻塞在select()操作之上。